我正在尝试从本机代码访问托管函数。我在 Visual Studio 2010 中使用 CLR 选项创建了一个 c++/cli dll。这是我的 C# 代码:
namespace ManagedNamespace
{
public class Managed
{
public void CSharpFunc()
{
.
.
.
}
}
}
这是我的 c++\CLI 代码(项目参考 c# 项目 - 我将此代码编译为 Wrapper.dll):
#ifdef __cplusplus
extern "C"
{
#endif
__declspec(dllexport) void CLIFunc(const std::string& a, const std::string& b, std::string& c)
{
System::String^ new_a = gcnew System::String(a.c_str()); //OK
System::String^ new_b = gcnew System::String(b.c_str()); //OK
Text::StringBuilder^ new_c = gcnew Text::StringBuilder(""); //OK
ManagedNamespace::Managed^ m = gcnew ManagedNamespace::Managed(); //this line is the problematic line
m->CSharpFunc();
}
当我创建 ManagedNamespace::Managed 对象时,我从另一个 dll 调用此函数并获取 EXCEPTION_EXECUTE_HANDLER。这是代码:
typedef void (WINAPI *CLIFuncPtr)(const std::string& a, const std::string& b, std::string& c);
.
.
.
HMODULE mod = LoadLibraryA("c:\\mydir\\Wrapper.dll");
if (mod!= NULL)
{
CLIFuncPtr FuncPtr = (CLIFuncPtr)GetProcAddress(mod, "CLIFunc");
if (FuncPtr != NULL)
{
FuncPtr (aa, bb, cc);
}
}
感谢任何帮助,谢谢