繁体   English   中英

如何将const char *转换为静态const char XY []?

[英]How to cast const char* to static const char XY[]?

我正在做一些使用DLLImport调用我的C ++ DLL内部函数的C#代码:

[DllImport("my.dll", EntryPoint = "#16", CallingConvention = CallingConvention.StdCall)]
    private static extern void sendstring(string s);

我在C#中这样称呼它:

sendstring("Test1\\0test2\\0");

我的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 * s(它将报告与被调用的其他dll不同的错误)。 我将需要知道如何将const char * s转换为静态const char s []之类的东西。

当您意识到我对此一无所知时,欢迎您提供任何帮助!

好吧,我发现了自己的想法:

我将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");

我不知道这是否是一个聪明的解决方案,但至少它是一个:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM