Прежде всего я использую MinGW 4.8, как составителя DLL C++ в коде:. Блоки 13,12 и Lazarus 1.4.2 для работы с паскаль кода (Windows 7)Использование C/C DLL ++ с FreePascal
Мне нужно создать dll в C++ или c, который можно вызвать из программы pascal.
Проблема в том, что мой knowlegde о pascal равен null. Это не очень усложняет задачу создания простой программы, но я не могу найти хорошую информацию о том, как импортировать и использовать C/C++ DLL.
Единственное, что большеменьше работал было так: http://www.drbob42.com/delphi/headconv.htm Мой реальный код:
Pascal:
funtion hello():Integer; external 'function' index 1;
...
Label1.Caption:=IntToStr(hello());
заголовок DLL C++:
#ifndef function_H
#define function_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef BUILDING_DLL
#define FUNCTION_DLL __declspec(dllexport)
#else
#define FUNCTION_DLL __declspec(dllimport)
#endif
int __stdcall FUNCTION_DLL hello();
#ifdef __cplusplus
}
#endif
#endif
C файл ++:
#include <stdio.h>
#include "function.h"
__stdcall int hello()
{
return 8;
}
Но при попытке передать какой-либо аргумент или сделать что-то осложненное функцией, начинает давать номера рядов.
Это новый код: Pascal:
function function1(t1:Integer):Integer; external 'function' index 1;
...
entero:=8;
Label1.Caption:=IntToStr(function1(entero2));
Также я обновить C++ код для этого:
C++:
#include <stdio.h>
#include "function.h"
__stdcall int function1(int t1)
{
return t1*2;
}
Заголовок:
#ifndef funtion_H
#define funtion_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef BUILDING_DLL
#define FUNCTION_DLL __declspec(dllexport)
#else
#define FUNCTION_DLL __declspec(dllimport)
#endif
int __stdcall FUNCTION_DLL function1(int t1);
#ifdef __cplusplus
}
#endif
#endif
I as lo читать эту другую информацию: http://www.jrsoftware.org/ishelp/index.php?topic=scriptdll. И попытался реализовать вызов DLL так:
Pascal:
function function1(t1: Integer): Integer; external '[email protected]:function.dll';
Но я получаю ошибку о том, что:
The procedure entry point function1 could not be located in the dynamic link library function.dll
Я ищу пример, который работает или в Интернете учебник или что-то, чтобы продолжить работу, потому что я очень зациклен на этом. Спасибо заранее.
Добавление stdcall; отлично работал в первом случае, большое спасибо :). Но он не работает без использования индекса. Он продолжает давать мне эту ошибку: «Точка входа в систему funtion1 не может быть расположена в динамической библиотеке ссылок function.dll» :( – JoseleMG
Помните, что я не вижу ваш файл .def, или, тем не менее, вы экспортировали функцию. Я не думаю, что вы хотите использовать ординалы. Думаю, я ответил на вопрос, который вы задали. –