0
Robert GieseckeのUnmanaged Exportsを使用して、ネイティブC++アプリケーションからC#managed dllの関数を呼び出しています。私は今、どういうわけか、私のDLLがC++にコールバックをすることができるように、私のC++アプリケーションから関数ポインタをC#dllに渡す必要があります。これは私に困ってしまった。C++からC#dllへの関数ポインタをコールバックとして使用するためのコールバック
C++
//Normal call to CSharp dll using Unmanaged Exports
FString UHostBridgeComponent::DoCallToCCsharp()
{
FString filePath = FPaths::Combine(*FPaths::GamePluginsDir(), TEXT("ThirdParty"), TEXT("CSharp.dll"));
void *DLLHandle = NULL;
if (FPaths::FileExists(filePath))
{
DLLHandle = FPlatformProcess::GetDllHandle(*filePath); // Retrieve the DLL.
}
if (DLLHandle != NULL)
{
_DoTest DLLFuncPtr = NULL;
FString procName = "DoTest";
DLLFuncPtr = (_DoTest)FPlatformProcess::GetDllExport(DLLHandle, *procName);
if (DLLFuncPtr != NULL)
{
const char* result = DLLFuncPtr(false);
FString output(result);
return output;
}
}
return "";
}
C#
//Function called from C++ application
[DllExport("DoTest", CallingConvention = CallingConvention.StdCall)]
public static string DoTest(bool result)
{
//Do processing
//...
string result = "this is the result string";
return result;
}
私はC#で関数を呼び出すときにC++で関数へのポインタを渡す必要があることを想像。ポインタはC#で変数に保存され、C#のDLLはC++アプリケーションにデータを送信したいときにコールバックとして実行する必要があります
const char * result = DLLFuncPtr(pointerToMyFunction);
。
これらの関数と変数の定義方法がわかりません。どんな助けもありがとう。