Есть сабж. Я делаю следующее:
Кусок Dll на Си:
#include "math.h"
extern "C" __declspec(dllexport) void trans(float* ptr,int ik,int jk,float* pRez){
//Транспонирование матрицы
for(int i=0; i<ik;i++){
for(int j=0;j<jk;j++){
*(pRez+i+j*ik)=*(ptr+j+i*jk);
}
}
}
Есть ещё файл math.h:
#ifndef _MATH_H_
#define _MATH_H_
extern "C" __declspec(dllexport) void trans(float* ptr,int ik,int jk,float* pRez);
#endif
Всё прекрасно компилируется и работает (если программа на си).
Нужно программу на Дельфи. Пишу:
procedure TForm1.FormCreate(Sender: TObject);
var
hDll:THandle;
trans:procedure(ptr:pointer;ik,jk:integer;var pRez:pointer); stdcall;
mass:array of array of single;
rez:array of array of single;
begin
hDll:=LoadLibrary('math_dll.dll');
if hDll<>0 then
begin
@trans:=GetProcAddress(hDll,'trans');
if Assigned(@trans)=false then
ShowMessage('Функция trans не найдена!');
SetLength(mass,5,5);
SetLength(rez,5,5);
//Заполняем здесь массив случайными числами (здесь ошибки быть не может :))
trans(@mass[0,0],5,5,@rez[0,0]);
Итак далее...
Короче не работает, с этой функцией вообще не компилируется, пишет Types of actual and formal parametrs must be identical, с другими функциями компилируется но Access violation! Функция загружается нормально. Что не правильно? И каким образом ещё можно в программе на Delphi загрузить Dll написанную на C???