0
即時通訊編寫一個插件到C++項目,我利用UnmanagedExports Nuget包,它允許暴露在託管的.NET代碼中的C函數。 https://www.nuget.org/packages/UnmanagedExports反向pinvoke char * []使用StringBuilder
我已經寫接收的字符串(定義爲在C的char * ++) 下面是UnmanagedExport方法我已經定義爲此工作的插件。
[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder MyString)
{
//Use and modify the StringBuilder. It receives the string passed and returns the modified version because it is being passed by reference.
}
上面的代碼運行非常漂亮。
現在的問題是如何將字符串數組傳遞給我的UnmanagedExport代碼。 C++將呼叫定義爲需要char * []
這不起作用。
[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder[] MyString)
{
}
黃金法則是先寫一個C函數,它採用相同的參數,並說,用printf()顯示它們的值。你完全有把握地發現問題:*數組有多長?*你不知道,C#不知道,Giesecke不知道。只要不理解非託管代碼,就不要跳過這一步。 –
@HansPassant感謝您的輸入,指引我朝着正確的方向。我在下面添加了我的答案,但這隻允許我傳入一個字符串數組。如果對數組進行修改,則對該數組的更改不會反映在調用者代碼中。 – CathalMF