我有一个从非托管代码传递字符串到托管的问题。 在我的非托管类(unmanagedClass.cpp)我有一个指针从托管代码的功能:从非托管代码传递字符串到托管
TESTCALLBACK_FUNCTION testCbFunc;
TESTCALLBACK_FUNCTION接受一个字符串,并没有返回值:从ITest接口
typedef void (*TESTCALLBACK_FUNCTION)(char* msg);
非托管类inherites其中只有一种方法:
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);
}
要调用从非托管代码测试FUNC我用这个
(*testCbFunc)("Func Uragan33::Execute has been started!");
但是,当从managedClass.cs测试方法被称为我总是收到空字符串。 为什么会发生?
提前致谢!
非常感谢你! – Alekstim 2013-03-19 08:27:43