2010-06-17 109 views
0

我一直在嘗試創建一個可以通過VB6訪問的C/C++的DLL,這就是我得到錯誤「453在myDllName中找不到DLL入口點myFunctionName .dll「從VB6應用程序調用該函數後。 在搜索了包括本網站在內的網站之後,我發現我並不孤單,而且我嘗試過發佈各種解決方案,但錯誤「453」無法解決。 這不是一個COMM DLL,我相信這是可能的,當通過C/C++創建。 無論如何,請幫助,如果可以的話。請參考以下下面這個簡單的測試案例:DLL導出VB6調用的C/C++ 6.00函數

爲C創建的DLL/C++ 6.00 Win32動態鏈接庫:

#include <Windows.h> 

// Note that I did try the line below rather than the def file, but to no avail... 
// #pragma comment(linker, "/EXPORT:[email protected]") 

// Function definition 
extern "C" int __declspec(dllexport) __stdcall ibask32() 
{ 
    MessageBox(NULL,"String","Sample Code", NULL); 
    return 0L; 
} 

DEF文件:

LIBRARY "Gpib-32" 
EXPORTS 
ibask32 

現在的VB App:

以下是啓動Form1的全部內容,Form_Load

Option Explicit 
Private Sub Form_Load() 
    Call ibask 
End Sub 

以下是添加到項目中的BAS模塊文件:提前

Option Explicit 

Declare Function ibask32 Lib "Gpib-32.dll" Alias "ibask"() As Long 

Sub ibask() 

    Call ibask32 ' Note: This is the point of failure 

End Sub 

感謝,如果能提供一個可行的解決方案, 湯姆

回答

1

您的權利儘可能接近無所不爲我可以告訴。通過運行DLL上的Dumpbin.exe/exports來驗證您的假設。這顯示了導出函數的實際名稱,它必須與VB6聲明中的別名相匹配。

我能想到的唯一的其他故障模式是VB6加載錯誤的DLL。如果您想從VB6 IDE使用它,它必須存在於PATH中列出的目錄中。通過從命令行運行「where gpib-32.dll」來驗證。

+0

謝謝漢斯, 問題解決了......它現在工作正常。 感謝Dumpbin/exports課程的確讓事情變得更加清晰。你在上面說的「它必須與別名相匹配......」 讓我立刻;這是必須從DLL中導出的內容。 感謝您的及時迴應。 – 2010-06-17 20:46:56

+0

@nash,聽起來像是對我有用的答案。請不要忘記標記爲這樣,我的帖子旁邊的複選標記。 – 2010-06-17 21:26:07

+0

+1非常棒的答案。 @nashth,如果您還有其他問題,請查看1996年的Microsoft關於編寫可從VB5調用的C 4.0 DLL的建議。他們從未更新過文檔,但我認爲幾乎所有的建議對於C++ 6.0 <-> VB6都是相關的。 http://vb.mvps.org/tips/vb5dll.asp – MarkJ 2010-06-18 12:04:50