簡體   English   中英

從c#調用返回字符串的c ++方法

[英]Call a c++ method that returns a string, from c#

請幫忙,

my c++ function:
extern "C" REGISTRATION_API void calculate(char* msg)
{
//some calculation here

msg = "some text"; 
}

我的C#電話:

[DllImport("thecpp.dll")]
static extern void calculate(StringBuilder sMsg);

        private void button4_Click(object sender, EventArgs e)
        {
            StringBuilder msg = new StringBuilder();
            calculate(msg);
            MessageBox.Show(msg.ToString());
        }

無論我在味精中放什么,stringbuilder始終為空? 為什么? 怎么了? 有任何想法嗎? 請分享

您應該為LPCTSTR緩沖區使用string ,為LPTSTR緩沖區使用StringBuilder是正確的。

但是您需要進行2處更改:

1)在StringBuilder上設置容量
2)您應該在該緩沖區中執行strcpy ,更改該變量所擁有的內存地址將不會像現在一樣執行任何操作。 您需要更改內存地址中的內容。

因此,您需要在C / C ++代碼中:

extern "C" REGISTRATION_API void calculate(LPSTR msg)
{
    //Also consider refactoring this function to take in the buffer length
    strcpy(msg, "some text");
}

並在C#中:

[DllImport("thecpp.dll", CharSet=CharSet.Ansi)]
static extern void calculate(StringBuilder sMsg);

private void button4_Click(object sender, EventArgs e)
{
    StringBuilder msg = new StringBuilder(1024);
    calculate(msg);
    MessageBox.Show(msg.ToString());
}

注意:實際上,您也應該將要傳入的緩沖區的長度也傳遞給calculate函數。

我對語法有點朦朧,但是我相信您想要這樣的東西:

[DllImport("thecpp.dll")] static extern void calculate([in, out] StringBuilder sMsg);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM