gpt4 book ai didi

c# - 关闭 dll 中的 Win32 对话框时出现异常(来自 WPF 应用程序)

转载 作者:行者123 更新时间:2023-11-28 05:24:12 24 4
gpt4 key购买 nike

我有一个从 DLL 调用 C++ 函数的 C# 应用程序。 C++ 函数只显示一个对话框和一个退出按钮。

DLL 中的 C++ 函数如下所示:

//the exported function for clients to call in DLL
HINSTANCE hInstance;
__declspec(dllexport) int __cdecl StartDialog(string inString)
{
hInstance = LoadLibrary(TEXT("My.dll"));
DialogBox(hInstance, MAKEINTRESOURCE(ID_DLL_Dialog), NULL, DialogProc);
return 1;
}

BOOL CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDD_BUTTON_EXIT:
DestroyWindow(hwnd);
return TRUE;
}
}
return FALSE;
}

如果我在一个简单的 C++ 程序中调用我的 StartDialog 函数,它就可以工作。我可以显示对话框,并且可以在我单击对话框中的退出时正确关闭它。

typedef int(__cdecl *StartDialogFunc)(string);
StartDialogFunc StartDialog = nullptr;
HINSTANCE hDll = LoadLibrary(TEXT("My.dll"));
StartDialog = (StartDialogFunc)GetProcAddress(hDll, "StartDialog");

int i = StartDialog("hello"); //this is working
cout << i;

如果我在我的 C# 应用程序中调用它,在我单击退出按钮后,对话框关闭,并给我一个异常。 C# 代码如下所示:

[DllImport("My.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int StartDialog(string s);

int i = StartDialog("hello"); //this causes a exception

错误信息如下:

Debug Assertion Failed!

Program: (some paths...) My.dll

File: d:\program files (x86)\microsoft visual studio 14.0\vc\include\xmemory0

Line: 100

Expression: "(_Ptr_user & (_BIG_ALLOCATION_ALIGNMENT - 1)) == 0" && 0

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

我如何才能知道我的 DLL 中到底出了什么问题?

最佳答案

尝试更改 C++ 函数签名以采用 WCHAR*,因为 C++ 的 std::string 与 C# 不兼容。此外,要获取当前 DLL 的句柄,请使用 GetModuleHandle(NULL),而不是 LoadLibrary。

HINSTANCE hInstance;

__declspec(dllexport) int __cdecl StartDialog(const WCHAR* inString)
{
hInstance = GetModuleHandle(NULL);
DialogBox(hInstance, MAKEINTRESOURCE(ID_DLL_Dialog), NULL, DialogProc);
return 1;
}

关于c# - 关闭 dll 中的 Win32 对话框时出现异常(来自 WPF 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40883283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com