gpt4 book ai didi

c# - C++ DLL 的函数不会在 WPF 中输出文本

转载 作者:行者123 更新时间:2023-12-04 07:16:11 25 4
gpt4 key购买 nike

我试图将文本从 C++ 函数输出到 WPF 中的文本框,但是当我单击按钮时,它什么也不输出。
在 C# 控制台中它起作用了。
这是来自 C# 控制台的代码:

namespace ConsoleApp1
{

class Program
{
const string dllfile = "C:\\...";
[DllImport(dllfile, EntryPoint = "main", CallingConvention = CallingConvention.Cdecl)]
private static extern string text_output();

static void Main(string[] args)
{
text_output();
}
}
}
这里是来自 C++ DLL 的代码:
using namespace std;


void text_output();
void text_output()
{
cout << "something" << endl;
}

extern "C" __declspec(dllexport) int main()
{
text_output();
return 0;
}
这是来自 C# WPF 页面的代码:
namespace application
{
public partial class Page1 : Page
{
const string dllfile = "C:\\...";
[DllImport(dllfile, EntryPoint = "main", CallingConvention = CallingConvention.Cdecl)]
private static extern string text_output();

public Page1()
{
InitializeComponent();
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
txtBox.Text += text_output();
}

}
}
我该怎么做才能使来自 text_output() 的文本单击按钮时,函数会输出到文本框吗?

最佳答案

在 Windows 上(WPF 暗示您正在使用),BSTR可以从标准的宽字符串创建,你可以试试 C++代码如:

#include <windows.h> // For BSTR from "wtypes.h" header.

extern "C" __declspec(dllexport) BSTR text_output()
{
return ::SysAllocString(L"something");
}

// ...
然后包裹成 stringMarshalAs在您的 C#声明,例如:
const string dllfile = "C:\\...";
[DllImport(dllfile, EntryPoint = "main", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.BStr)]
private static extern string text_output();

附言您可能需要转换 char *到宽字符串,例如:
BSTR StrToBSTR(const char *value) {
int valueLength = lstrlenA(value);
if (valueLength > 0) {
int resultLength = ::MultiByteToWideChar(CP_ACP, 0, value, valueLength, NULL, 0);
if (resultLength > 0) {
BSTR result = ::SysAllocStringLen(0, resultLength);
::MultiByteToWideChar(CP_ACP, 0, value, valueLength, result, resultLength);
return result;
}
}
return NULL;
}

关于c# - C++ DLL 的函数不会在 WPF 中输出文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68745828/

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