我在将字符串从非托管代码传递到托管代码时遇到问题。在我的非托管类(unmanagedClass.cpp)中,我有一个指向托管代码中的函数的指针:
TESTCALLBACK_FUNCTION testCbFunc;
TESTCALLBACK_FUNCTION 接受一个字符串并且不返回任何内容:
typedef void (*TESTCALLBACK_FUNCTION )(char* msg);
非托管类继承自 ITest 接口,该接口只有一种方法:
STDMETHOD(put_TestCallBack) (THIS_
LPVOID FnAddress
) PURE;
在 managedClass.cs 我写了这段代码:
public class ManagedClass
{
ITest unmanaged = new unmanagedClass();
public delegate void TestDelegate(string info);
ManagedClass()
{
unmanaged.put_TestCallBack(new TestDelegate(this.Test));
}
void Test(string info)
{
MessageBox.Show(info);
}
}
[ComImport, Guid("<my guid here>")]
public class unmanagedClass
{
}
[ComImport, System.Security.SuppressUnmanagedCodeSecurity,
Guid("<my guid here>"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITest
{
[PreserveSig]
int put_TestCallBack([MarshalAs(UnmanagedType.FunctionPtr), In] Capture.TestDelegate func);
}
要从非托管代码调用 Test func 我使用这个
(*testCbFunc)("Func Uragan33::Execute has been started!");
但是当调用 managedClass.cs 中的 Test 方法时,我总是收到空字符串。为什么会这样?
预先感谢!