我正在製作一個非託管的C++ DLL,它使用C#託管的DLL。我正在寫C++庫,因爲我需要使用可以作爲插件添加C++庫的軟件中定義的函數和頭文件。但是我想做的事情非常複雜,以致於我對C++的稀少知識會讓我放慢腳步,所以我決定在我最喜歡的C#中做一些事情,並通過COM連接這些DLL,並且我成功了。尋找最短的字符串類型轉換C++
我在編寫代碼時很成功,但在保持代碼簡潔方面不太成功,因爲我顯然不是專業的C++程序員。
問題是轉換各種字符串類型。 BSTR和特別是const char *。
以下代碼逆定理常量字符*到BSTR:
BSTR bstrt;
const char * someChar;
csharpInterfacedClassPointer->get_PropertyForSomeChars(&bstrt);
strcpy_s(nstring, (char *)bstrt);
someChar = nstring;
的問題是,我有很多離散someChars與相應的離散接口方法...被從C#接口所以產生的屬性方法無法改變它。對於30個離散變量,每個「someChar」需要以下三行代碼,我需要編寫90行代碼。
csharpInterfacedClassPointer->get_PropertyForSomeCharX(&bstrt);
strcpy_s(nstring, (char *)bstrt);
someCharX = nstring;
的問題是:你是怎麼寫的一些快捷鍵此所以它會只適合在一條線?
我用「getter」函數指針和someChar指針嘗試了某種函數。
但隨後編譯器說,一些奇怪的事情阿布德約束功能,以及它們是如何不允許作爲指針...我用Google搜索是什麼意思並給予所需的解決方案,以改變函數定義,但我不能這樣做是因爲定義是從C#代碼生成的(由regasm.exe生成)。
重要注意事項:我需要在最後得到const char *類型,因爲它是我爲其製作C++ DLL的程序的函數所需的輸入類型。
我可以問你真的需要使用char數組而不是std:string(或者wstring)嗎?有定義的系統函數做從bstr轉換爲wstring,反之亦然(示例:http://stackoverflow.com/questions/6284524/bstr-to-stdstring-stdwstring-and-vice-versa) –
不幸的是,我需要獲取字符串數組...由我編寫C++庫的程序函數施加的 – Mirek
@Motig:'std :: string :: c_str()'問題已解決。 –