Я получил ошибку из DLL, скомпилированной из Delphi с использованием в c ++, работающей в многопоточности
Delphi (Architect 10.3 Version 26.0.32429.4364) Библиотечный код
library Project1;
uses
System.SysUtils,
System.Classes;
{$R *.res}
procedure __test(size: integer); cdecl;
var
data : AnsiString;
begin
SetLength(data, size);
end;
exports
__test;
begin
end.
C ++ (Viausl Studio 2019) Загрузка библиотеки и использование многопоточности
// ConsoleApplication1.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <Windows.h>
#include <thread>
typedef void(__cdecl *functest)(int);
HINSTANCE hInst = nullptr;
functest test;
void thread_loop() {
while (1) {
test(10);
}
}
int main()
{
hInst = LoadLibraryA("Project1.dll");
if (!hInst) {
return 0;
}
test = (functest)GetProcAddress(hInst, "__test");
if (!test) {
return 0;
}
std::thread t1(thread_loop);
std::thread t2(thread_loop);
return 1;
Я получил исключение, но оно не должно получать никаких исключений, поскольку это переменная процедуры, которая не была предоставлена в общий доступ