我有一個從非託管代碼傳遞字符串到託管的問題。 在我的非託管類(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