2010-03-12 46 views
3

在非託管C不能訪問++ DLL我有一個功能,這需要不斷std::string作爲參數託管C++的std :: string在非託管C++

Prototype : void read (const std::string &imageSpec_) 

我傳遞一個std::string調用從託管C++ DLL此功能。
當我調試非託管的c + +代碼參數imageSpec_顯示正確的值,但不允許我複製該值在其他變量。

imageSpec_.copy(sFilename, 4052); 

它顯示的imageSpec_長度爲0(零)。
如果我嘗試複製像std::string sTempFileName(imageSpec_);這個語句字符串新字符串是一個空字符串。

但是對於std::string sTempFileName(imageSpec_.c_str());此語句字符串被正確複製。即用charpointer字符串被正確複製。

複製這種方式將需要非託管C++代碼的重大變化。
我正在Visual Studio 6.0中構建非託管代碼,並在Visual Studio 2008中管理C++。
託管C++中是否有任何特定設置或代碼更改可解決此問題?

+0

它是「託管C++」還是C++/CLI? – xyz 2010-03-12 15:08:00

+0

你確定支持混合使用VC++ 6.0和VC++ 2008對象嗎? – AProgrammer 2010-03-12 15:12:54

回答

1

我建立非託管代碼在Visual Studio 6.0和Visual Studio 2008中

您正試圖將std::string執行的Visual Studio 6.0複製到std::string implmentation的Visual Studio 2008的託管C++ 。如果你想跨DLL邊界傳遞C++對象,你必須非常小心 - 你必須使用完全相同的對象佈局(這是編譯器特定的)和庫實現來構建邊界的兩側,並根據兼容的運行時構建它們。

如果您想要創建一個可從使用該.dll中的不同編譯器/庫編譯的代碼中使用的.dll,則需要純C接口。


this相關的問題。