アンマネージコードからマネージコードへの文字列の受け渡しに問題があります。私のアンマネージクラス(unmanagedClass.cpp)には、マネージコードから関数へのポインターがあります。
TESTCALLBACK_FUNCTION testCbFunc;
TESTCALLBACK_FUNCTIONは1つの文字列を受け取り、何も返しません。
typedef void (*TESTCALLBACK_FUNCTION )(char* msg);
アンマネージクラスは、メソッドが1つしかない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);
}
管理されていないコードからTestfuncを呼び出すには、これを使用します
(*testCbFunc)("Func Uragan33::Execute has been started!");
しかし、managedClass.csのTestメソッドが呼び出されると、常にnull文字列を受け取りました。なぜそれが起こるのですか?
少し早いですがお礼を!