如何使用字符串参数从C#WPF应用程序调用c ++ dll中的函数?我通过“添加引用”将dll添加到C#app,而不是“[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 *
答案 0 :(得分:3)
由于您的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;
}