如何从C ++ / C#调用此DLL函数

时间:2011-12-19 22:34:33

标签: c# c++ dll pinvoke

我花了很多时间试图解决这个问题,所以我想我可以在这里得到一些帮助。 基本上我在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;
}

1 个答案:

答案 0 :(得分:1)

未经测试的C#声明:

[DllImport("thedll.dll", SetLastError=true)]
static extern int findFile([MarshalAs(UnmanagedType.BStr)]string fileName, out int someValue);