Salve,
con la premessa di non essere esperto in C++, vi espongo il mio problema, ho la necessità di creare una dll in c++ con all'interno delle funzioni di utility, quale, ad esempio, la lettura del seriale dell'HD, la dll deve essere richiamata da un'applicazione C#, la funzione mi deve restituire una stringa contenente il serial HD, il codice della dll è questo:
__declspec(dllexport) char* __stdcall GetHd()
{
WmiQueryResult res;
res = getWmiQueryResult(L"SELECT SerialNumber FROM Win32_PhysicalMedia", L"SerialNumber");
if (res.Error != WmiQueryError::None) {
return NULL;
}
std::string strValue;
char* pszReturn = NULL;
for (const auto& item : res.ResultList) {
strValue.assign(item.begin(), item.end());
ULONG ulSize = strlen(strValue.c_str()) + sizeof(char);
pszReturn = (char*)::CoTaskMemAlloc(ulSize);
strcpy(pszReturn, strValue.c_str());
break;
}
return pszReturn;
}
nall'applicazione C#, linko e chiamo la funzione in questo modo:
[DllImport("util.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string GetHd();
...
string serialhd = GetHd();
La funzione GetHd() mi restituisce NULL, lo stesso codice testato in un'applicazione console C++, funziona bene.
Grazie