我正在做一些C#代码,它使用DLLImport来调用我的C ++ DLL中的函数:
[DllImport("my.dll", EntryPoint = "#16", CallingConvention = CallingConvention.StdCall)]
private static extern void sendstring(string s);
我在C#中这样称呼它:
sendstring("Test1\\0test2\\0");
My C ++ DLL需要创建一个静态const char XY [] =“Test1 \ 0test2 \ 0”;从这个,因为我需要从我的c ++ DLL中调用另一个DLL函数,如下所示:
functiontootherdll(sizeof(s),(void*)s);
所以我在C ++中的代码:
extern "C" {
void MyClass::sendstring( const char *s) {
functiontootherdll(sizeof(s),(void*)s);
}
问题:如果我在我的C ++ DLL中手动定义这个东西是这样的:
static const char Teststring[] = "Test1\0test2\0";
functiontootherdll(sizeof(Teststring),(void*)Teststring);
但是从我的C#文件调用它时它没有使用const char *(它将报告来自被调用的其他dll的不同错误)。 我需要知道如何将const char * s转换为类似static const char []等的东西。
当你意识到我对这一切都一无所知时,所以非常欢迎任何帮助!
答案 0 :(得分:0)
好吧,我发现了一种我认为的方式:
我将我的C ++修改为:
extern "C" {
void MyClass::sendstring( const char *s) {
int le = strlen(s);
char p[256];
strcpy(p,s);
char XY[sizeof(p) / sizeof(*p) + 1];
int o=0;
for (int i = 0; i<le;i++) {
if (p[i] == ';') {
XY[i] = '\0';
} else {
XY[i] = p[i];
}
o++;
}
XY[o] = '\0';
functiontootherdll(sizeof(XY),(void*)XY);
}
之后函数调用
functiontootherdll(sizeof(XY),(void*)XY);
工作正常。
请注意,我现在从我的C#代码发送一个字符串,如“Test1; test2; test3; ...”,尝试使用\\ 0作为分隔符无效。我与C#的电话是:
sendstring("Test1;test2;test3");
我不知道这是否是一个聪明的解决方案,但至少它是一个:)