Я искал ответы на свои проблемы, но кажется, что большинство людей заинтересованы в передаче std :: string через границы .dll. Но меня больше интересует использование std :: string в классе, который находится в DLL, который я создаю.Можете ли вы использовать std :: string в сторонней DLL?
Я выпускаю мою .dll (по электронной почте) группе людей на форуме, в которой я одинок, поэтому мой вопрос: можете ли вы использовать std :: string в .dll, не имея ограничений, таких как компилятор, которые должны быть одинаковыми , версия, 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 *. –