从C#程序,我调用VC ++函数,它有BSTR作为输入参数。我没有得到任何回报价值。我的c#应用程序崩溃。
C#:SampleCS,
var value = object.GetValue(10,“TEST”);
VC ++:SampleCPP,
GetValue(长索引,BSTR键,双*值) { CString str = key; .. .. }
知道我是否遗漏了什么或做错了什么?
注意:如果我从VB6调用VC ++的GetValue函数,那么它可以正常工作。
答案 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);
}