return 字符串类型时,Visual Basic WPF 加载 ATL C++ dll 程序退出
Visual basic WPF load ATL C++ dll program exit when return String type
我正在使用 VB.net WPF 和 dll
使用 ATL 为这个项目制作
但每次我 运行 dll 函数,程序退出时没有错误
请告诉我为什么不起作用以及如何解决它。
c++函数
extern "C" __declspec(dllexport) BSTR __cdecl sprint(LPSTR str1, LPSTR str2) {
TCHAR test[100];
sprintf_s(test, 100, "%s %s", str1, str2);
BSTR test2 = L"helloworld";
return test2;
}
VB.net代码
声明
<DllImport("database.dll", CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function sprint(ByVal str1 As String, ByVal str2 As String) As String
End Function
用法
Private Sub On_Submit_Btn_Clk(sender As Object, e As RoutedEventArgs)
testStr = sprint("hello", "world")
MessageBox.Show(testStr)
End Sub
问题:
调用函数“sprint”时程序退出。
没问题:
函数“sprint”时程序不退出return整数。
仅 BSTR、LPTSTR、LPSTR 类型 returns 使 proram 退出。
在 COM 编程中,BSTR
是一个特殊的 LPWSTR
,由 SysAllocString
分配,由 SysFreeString
释放。字符前面是字符串长度,偏移量为 -1。这意味着您可以将 BSTR
传递给所有需要 LPCWSTR
的函数
L"helloworld"
是 C++ 字面量,除了 const 部分外,它几乎与 LPWSTR
类型匹配。 VC++ 将掩盖最后一个小问题。 MSVC 中最简单的解决方案是对 BSTR
使用 _bstr_t
包装器类型,它会为你做 SysAllocString
。否则您需要手动完成。
我正在使用 VB.net WPF 和 dll
使用 ATL 为这个项目制作
但每次我 运行 dll 函数,程序退出时没有错误
请告诉我为什么不起作用以及如何解决它。
c++函数
extern "C" __declspec(dllexport) BSTR __cdecl sprint(LPSTR str1, LPSTR str2) {
TCHAR test[100];
sprintf_s(test, 100, "%s %s", str1, str2);
BSTR test2 = L"helloworld";
return test2;
}
VB.net代码
声明
<DllImport("database.dll", CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function sprint(ByVal str1 As String, ByVal str2 As String) As String
End Function
用法
Private Sub On_Submit_Btn_Clk(sender As Object, e As RoutedEventArgs)
testStr = sprint("hello", "world")
MessageBox.Show(testStr)
End Sub
问题:
调用函数“sprint”时程序退出。
没问题:
函数“sprint”时程序不退出return整数。
仅 BSTR、LPTSTR、LPSTR 类型 returns 使 proram 退出。
在 COM 编程中,BSTR
是一个特殊的 LPWSTR
,由 SysAllocString
分配,由 SysFreeString
释放。字符前面是字符串长度,偏移量为 -1。这意味着您可以将 BSTR
传递给所有需要 LPCWSTR
L"helloworld"
是 C++ 字面量,除了 const 部分外,它几乎与 LPWSTR
类型匹配。 VC++ 将掩盖最后一个小问题。 MSVC 中最简单的解决方案是对 BSTR
使用 _bstr_t
包装器类型,它会为你做 SysAllocString
。否则您需要手动完成。