ПредишенСледващото

Как да извикате функция от DLL (написан на Delphi) от VC ++.

Като погледна през :) кода интернет самата DLL пиша това:

процедура Init (); stdcall; износ;
започвам
приключи;

износа
Init име "Init @ 0"; // 0 - общият размер на всички параметри в байтове
край.

библиотека TDLL
описание "TDLL библиотека"
износа
Init 0 @

и го включи в проекта VC.

ученик "C"
<
_declspec (dllimport) _stdcall анулира Init ();
>

Композитор на него се казва:

Всичко е възможно статично свързване или само dinamichesokoe?

Ако направим една библиотека, за изключително ползване на C / C ++, че е подходящо да се използват стандартни фондове за рисков капитал (и, че се опитвате да го използвате). За да направите това, трябва да се уточни текста на Паскал, че функции се позовава в cdecl конвенция, не stdcall. Аз коригира въведения текст:

библиотека dccdll;
функция Init (а, б: число): цяло число; cdecl; износ;
започвам
Init: = а - б + 1;
приключи;
износа
първоначален;
край.

Да предположим, че сте направили библиотеката, като пуснете

и получи dccdll.dll библиотека. Какво да се прави по-нататък.

Подбудил й Borland полезност impdef:

impdef dccdll.def dccdll.dll

и да получите dccdll.def файла - в нашия случай това ще бъде

ИЗНОС
Init @ 1; Init

Извършване на прилеп файл със следното съдържание:

наричаме "C: \ Program Files \ Microsoft Visual Studio \ VC98 \ Bin \ VCVARS32.BAT"
ИЪ /DEF:dccdll.def / MACHINE: ix86 /out:dccdll.lib

и ще получите dccdll.lib библиотека

Dccdll.h запис заглавния файл, който описва функциите на езика C, което е нещо като:

ученик "C" <
Int __declspec (dllimport) Init (междинно съединение, Int);
>

Вече можете да създавате проект VC, преместите в папката на проекта и всички наши файлове за да извикате функция на този кодекс:

#pragma коментар (Иб "dccdll.lib")
#include "dccdll.h"
#include
невалидни основни () <
ФОРМАТ ( "\ п.", Init (5, 3));
>

Дава 3, както се изисква.

Функциите на директорията на библиотеката в Delphi може да се нарече в C ++ се използват само LoadLibrary и GetProcAddress (защото Delphi не създава ИЪ файл)

DLL самия код трябва да бъде написана, както следва:

процедура Init; stdcall;
започвам

и трябва да бъде написан на C ++, така че

typedef нищожен (__stdcall * LPINITFUNC) ();

нищожен Init ()
<
HMODULE дръжка = LoadLibrary ( "dll.dll");
LPINITFUNC InitFunc = GetProcAddress (дръжка, "Init");
(* InitFunc) ();
FreeLibrary (дръжката);
>

Palva: Благодаря ви много! Всичко се оказа. Какво е интересно, в интернет по този въпрос не можах да намеря нищо разбираем.

Подкрепете проекта - споделете линка, благодаря!