Я рабочий DLL написаны на C++ с использованием Visual Studio 2015. Он содержит множество функций вида:Экспортные имена функций из C++ Dll в Delphi
BECALIBRARY_API int Functions::GetVersion(char* ptrVersionString)
{
char * Version;
Version = "Test 123456";
strcpy_s(ptrVersionString, strlen(Version) + 1, Version);
return strlen(Version);
}
Функция Delphi получить это:
unit uBecaLibrary;
interface
function getVersion(Str1: pAnsichar): integer; stdCall;
implementation
function getVersion; external 'BecaLibrary.dll' index 1;
//function getVersion; external 'BecaLibrary.dll' name 'getVersion';
end.
Это прекрасно работает, за исключением того, что я должен поддерживать код Delphi, используя номера индексов DLL.
Что мне нужно сделать как стороне C++, так и стороне Delphi Seattle Windows 10 для использования имен функций, а не индексов.
Существует алгоритм для генерации искаженных имен. IIRC они содержат количество байтов параметров каким-то образом, но я долгое время рассматривал это. – dummzeuch
Да - это работает. Исправленное имя для простого вызова getVersion становится; функция getVersion; external 'BecaLibrary.dll' name '? GetVersion @ Functions @ BecaLibrary @@ SAHPAD @ Z'; Я называю Dlls, которые были созданы с использованием Embarcadero C++, и они не искажены. Есть ли способ остановить Visual Studio от этого? –
Вы также можете добавить следующее в тело функции, чтобы также экспортировать unmangled name #pragma comment (linker, "/ EXPORT:" __FUNCTION__ "=" __FUNCDNAME__) – EugeneK