簡體   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