У меня есть простая управляемая сборка C ++, в которой я предоставляю неуправляемые оболочки для некоторых статических методов, которые есть в сборке C #. Один из этих методов возвращает строку, которую я преобразовал в тип const char * в сборке C ++. Проблема у меня в том, что когда я загружаю эту dll из неуправляемого источника, я получаю неверные данные обратно в указатель. Что я могу сделать по этому поводу? Я упростил свой тестовый пример до этого:
управляемая сборка (Test.dll скомпилирован с / clr; полный код приведен ниже):
extern "C" {
__declspec(dllexport) const char* GetValue(const char* s) {
return s;
}
}
Неуправляемое консольное приложение win32:
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
typedef const char* (*GetValueFunc)(const char* s);
int _tmain(int argc, _TCHAR* argv[]) {
wprintf(L"Hello from unmanaged code\n");
HMODULE hDll = LoadLibrary(L"Test.dll");
if (!hDll)
return GetLastError();
wprintf(L"library found and loaded\n");
GetValueFunc getValue = (GetValueFunc)GetProcAddress(hDll, "GetValue");
if(!getValue)
return GetLastError();
wprintf(L"%s\n", getValue("asdf"));
return 0;
}
Я получаю первые две строки просто отлично, но третья строка - это мусор. Также не имеет значения, если я сделаю dll иметь «#pragma unmanaged» в верхней части файла cpp или нет (те же результаты).