C#程序调用c ++函数,它有BSTR作为输入参数

时间:2014-06-27 15:00:55

标签: c# visual-c++ vb6 bstr

从C#程序,我调用VC ++函数,它有BSTR作为输入参数。我没有得到任何回报价值。我的c#应用程序崩溃。

C#:SampleCS,

var value = object.GetValue(10,“TEST”);

VC ++:SampleCPP,

GetValue(长索引,BSTR键,双*值) {   CString str = key;   ..   .. }

知道我是否遗漏了什么或做错了什么?

注意:如果我从VB6调用VC ++的GetValue函数,那么它可以正常工作。

1 个答案:

答案 0 :(得分:1)

Marshal类具有从托管代码处理BSTR的方法。尝试这样的事情:

// Note that the BSTR parameter in C++ becomes
// an IntPtr in this PInvoke declaration.
[DllImport("your.dll")]
private void GetValue(long index, IntPtr key, ref double value);

使用此方法:

double result = 0;
var stringValue = "Foo";
var bstrValue = Marshal.StringToBSTR(stringValue);
try
{
    GetValue(0, bstrValue, ref result);
}
finally
{
    Marshal.FreeBSTR(bstrValue);
}