我花了很多時間來解決這個問題,所以我想我可以在這裏得到一些幫助。 基本上我有在IDL聲明這樣的DLL功能:如何從C++/C調用這個DLL函數#
[id(1), helpstring("method findFile")] HRESULT findFile(
[in] BSTR fileName,
[out] LONG* someValue
);
究竟如何聲明和從任C++/C#調用?
注意:有一個成功調用該函數的VB6應用程序。宣言是:
Private Declare Function findFile Lib "thedll.dll" (_
ByVal fileName As String, _
ByRef someValueAs Long _
)
召喚:
Dim a As String
Dim b As Long
Dim r As long
a = "image.jpg"
b = -1
r = findFile(a, b)
附錄:
我不能保證VB6的代碼看起來像,因爲我有可執行文件,我只告訴是什麼部分看起來像,所以也許你們是對的,它不匹配。我編寫了C++ DLL,現在我需要將自己成功調用DLL的一些代碼彙集在一起,以便嘗試一些東西而不依賴於該exe文件。
C++實現的DLL函數如下:
STDMETHODIMP CFinder::findFile(BSTR fileName, LONG* someValue)
{
*someValue = 8;
return S_OK;
}
我是有點懷疑。如果你聲明這個函數(而不是使用TLB文件),它會失敗,因爲1)'fileName'將以錯誤的方式編組2)Variant'的返回值會使堆棧失衡(應該是Long ')。 – GSerg 2011-12-19 22:40:25
請顯示聲明函數的C++源代碼。 – 2011-12-20 17:23:39
那裏。我使用ATL。 – 2011-12-20 18:35:46