如何从 DLL 项目调用 C# 项目函数C++



我有两个项目,名为CPPDLLProject和CSharpProject。

在CPPDLLProject中,很少有dllexport函数可以从CSharpProject调用,并且调用工作正常。

但在这里我想从 CPPDLLProject 调用 CSharpProject 的函数,以便将数据从 DLL 传播到 C# 项目C++。

只是为了更多解释,想添加下面的代码示例。 下面是 C++ DLL 中要从中调用 C# 函数的函数。

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);
}

请建议如何实现这一目标。

我在谷歌上搜索了几次,但没有运气。 我的问题可能不清楚,但感谢任何形式的帮助。

我不太明白你的问题,但你可以使用中间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);
}

名称 = 函数的名称

dll 名称 = dll 的名称

有了这个,您将能够加载DLL并获取指向所需函数的函数指针,但是您可能需要编译C#DLL才能使用它,您可以制作一个桥接或其他东西

最新更新