将字符串传递给dll
本文关键字:dll 字符串 | 更新日期: 2023-09-27 17:54:12
如何使用字符串参数从c# WPF应用程序调用c++ dll中的函数?我通过"添加引用"添加dll到c#应用程序,而不是"[DLLImport]"
所有的问题是c#建议函数带有'sbyte*'参数,而不是'char*'。带'int'形参的函数工作得很好。
代码如下:
我在c++ dll中的函数:
public ref class OpenGLHwnd : public HwndHost
{
public:
void myFunc(char* name)
{
// some code
}
c#代码:HwndHost host = new WPFOpenGLLib.OpenGLHwnd();
HWNDPlaceholder.Child = host;
(HWNDPlaceholder.Child as WPFOpenGLLib.OpenGLHwnd).myFunc("aaaa");
myFunc想要'sbyte*'参数,而不是'char*'。为什么?
或者请告诉,如何将字符串转换为sbyte*
由于您的c++ DLL显然是。net汇编(ref class
,即c++/CLI),您可以将字符串传递为。net String
:
#include <msclr/marshal.h>
using namespace msclr::interop;
public ref class OpenGLHwnd : public HwndHost
{
public:
void myFunc(System::String^ name)
{
marshal_context^ context = gcnew marshal_context();
const char* ptr = context->marshal_as<const char*>(name);
puts(ptr);
delete context;
}