我一直在尋找我的問題的答案,但似乎大多數人都感興趣將std :: string跨越.dll邊界。但我更感興趣的是在我創建的.dll類中使用std :: string。你可以在第三方DLL中使用std :: string嗎?
我將我的.dll(電子郵件)發佈給論壇上的一組人,因此我的問題是您可以在.dll中使用std :: string,而不需要像編譯器一樣的限制必須相同,版本,CRT需要相同,等等。
你能給我舉例說明什麼是不安全的,什麼是安全的?
示例:對於「下載程序」使用SetSender函數,這是否安全?
Mail.h
class _declspec(dllexport) Mail {
struct ENVELOPE {
std::wstring SenderEmail; //Should the type be LPWSTR or can it safely be std::wstring
LPWSTR SenderName;
}Envelope;
public:
int SetSender(LPWSTR SenderEmail);
Mail();
~Mail();
};
Mail.cpp
#include "stdafx.h"
#include "Mail.h"
int CoffeeBeans::Mail::SetSender(LPWSTR Email) {
//Pass LPWSTR instead of std::wstring across .dll boundary
if (Email == nullptr || lstrcmp(Email, L"") == 0) {
throw L"Email was either nullptr or empty.";
}
this->Envelope.SenderEmail = SenderEmail;
return 0;
}
我會說C字符串肯定是安全的。那麼爲什麼不傳遞一個只讀的C字符串呢? –
我在過去曾經使用過一個.dll文件,當我使用一個帶std :: string(mysqlC++庫)的函數時,我的程序崩潰了,我不得不重新編譯dll來使它工作。 – tkausl
@PaulStelian謝謝,但是你是非常正確的,我一直在傳遞wchar *而不是const wchar *的壞習慣。 –