我花了很多时间试图解决这个问题,所以我想我可以在这里得到一些帮助。 基本上我在IDL中有一个像这样声明的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。
DLL函数的C ++实现如下所示:
STDMETHODIMP CFinder::findFile(BSTR fileName, LONG* someValue)
{
*someValue = 8;
return S_OK;
}
答案 0 :(得分:1)
未经测试的C#声明:
[DllImport("thedll.dll", SetLastError=true)]
static extern int findFile([MarshalAs(UnmanagedType.BStr)]string fileName, out int someValue);