我有两个项目,分别命名为CPPDLLProject和CSharpProject。
在CPPDLLProject中,可以从CSharpProject调用的dllexport函数很少,并且该调用工作正常。
但是在这里我想从CPPDLLProject调用CSharpProject的函数,以便可以将数据从C ++ DLL传播到C#项目。
仅出于更多说明,想添加以下代码示例。 下面是要从中调用C#函数的C ++ DLL中的函数。
void __stdcall CPPDLLApp::PumpMessageData(int aCode, int aType)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (aCode == PUMP_UPDATE_MSG && aData != NULL)
{
switch (aType)
{
case MSG_ADD:
{
// Call the C# function to send the added msg to C# project
GetCPPDLLAppMsg("MSG added");
break;
}
case MSG_DELETE:
{
// Call the C# function to send the deleted msg to C# project
GetCPPDLLAppMsg("MSG deleted");
break;
}
case MSG_UPDATE:
{
// Call the C# function to send the updated msg to C# project
GetCPPDLLAppMsg("MSG updated");
break;
}
}
}
if (aCode == PUMP_STOP_MSG)
{
// Call the C# function to send the stop msg to C# project
break;
}
if (aCode == PUMP_START_MSG)
{
// Call the C# function to send the start msg to C# project
break;
}
}
下面是C#项目的功能。
public void GetCPPDLLAppMsg(string aMessage)
{
Console.WriteLine(aMessage);
}
请提出如何实现此目标的建议。
我很少进行谷歌搜索,但是没有运气。 我的问题可能不清楚,但可以提供任何帮助。
答案 0 :(得分:0)
我不太了解您的问题,但是您可以使用中间dll和以下C ++方法:
void *p = (void *)wglGetProcAddress(name);
if (p == 0 ||
(p == (void*)0x1) || (p == (void*)0x2) || (p == (void*)0x3) ||
(p == (void*)-1))
{
HMODULE module = LoadLibraryA("dllname.dll");
p = (void *)GetProcAddress(module, name);
}
名称=函数名称
dllname =您的dll名称
使用此方法,您将能够加载dll并获取指向所需的所有函数的函数指针,但是您可能需要编译C#dll才能使用此功能,您可以搭建桥梁或其他东西