관리되지 않는 코드의 문자열을 managed로 전달하는 데 문제가 있습니다. 내 관리되지 않는 클래스에서 (unmanagedClass.cpp) 내가 관리 코드에서 함수에 대한 포인터를 가지고 :관리되지 않는 코드에서 관리되는 문자열 전달
TESTCALLBACK_FUNCTION 한 문자열을 받아 아무 것도 반환하지TESTCALLBACK_FUNCTION testCbFunc;
: 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