[爆卦]如何 執行 DLL檔是什麼?優點缺點精華區懶人包

為什麼這篇如何 執行 DLL檔鄉民發文收入到精華區:因為在如何 執行 DLL檔這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者dogs1231992 (河豚)看板Visual_Basic標題[VB6 ] Dll檔呼叫規格錯...


最近在整合Fortran跟VB6的時候發生Dll檔怎樣也掛不上去的狀況

找了很多資料還是無法找到正確解答

只好上來求助鄉民們了Q___Q

我在測試的時候 寫了一個Fortran檔

內容為

real function circle_area(radius)
!DEC$ ATTRIBUTES DLLEXPORT :: CIRCLE_AREA
!DEC$ ATTRIBUTES ALIAS : "Circle_Area" :: CIRCLE_AREA
implicit none
real radius
real, parameter :: PI = 3.14159
circle_area = radius*radius*PI
return
end function

接著用g95跟dlltool來編譯,產生 .o .dll .def三種檔案

由.def中可以得知進入的端口是 circle_area__

因此我在VB6裡面寫

Private Declare Function circle_area__ Lib "forlib.dll" (r As Single) As Single

Private Sub Command1_Click()
Dim r As Single
Dim a As Single
r = Val(Text1.Text)
a = circle_area__(r)
Label3 = Str(a)
End Sub

結果,在執行時,一直顯示 a = circle_area__(r) 這行有問題

跟我說 "呼叫規格錯誤"

我上網找了很多範例,但是都沒有看到這部分的說明

不知道是編譯dll檔的過程出了問題還是程式碼敘述不對?

希望有強者可以救救小弟Q___Q

我的g95跟dlltool的指令是

1. 產生.o檔
-c $(FileName) -Wuninitialized -Wimplicit-none -Wunused-vars -Wunset-vars
-fbounds-check -ftrace=full -O2

2. 產生.def檔
-z $(FileTitle).def --export-all-symbols $(FileTitle).o

3.產生.dll檔
-shared -mrtd -o $(FileTitle).dll $(FileTitle).o $(FileTitle).def

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.218.125
※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1422043917.A.34D.html
chinoyan: r = Val(Text1.Text) 改 r = CSNG(Text1.Text),試試 01/26 21:44
dogs1231992: 小弟找到問題了 官方給的資料錯誤 01/27 21:32
dogs1231992: 產生.dll檔那行指令 應該改成 01/27 21:32
dogs1231992: -shared -mrtd -o $(FileTitle).dll $(FileTitle).f9 01/27 21:33
dogs1231992: 0 (而不是.o 01/27 21:33
dogs1231992: 只要改了這項之後就可以正常編譯了 01/27 21:33
dogs1231992: 除了def檔需要用dlltool以外,其餘都用g95即可 01/27 21:34
MOONRAKER: .o不是Unix的obj檔名嗎 這個link步驟看得真頭昏 @@ 01/28 16:23
dogs1231992: M大 其實只要執行最後一個指令就好,會直接產生dll檔 01/28 20:30
dogs1231992: 然後就可以直接掛載到VB上 01/28 20:30

你可能也想看看

搜尋相關網站