powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / dll vc
12 сообщений из 12, страница 1 из 1
dll vc
    #32240950
relax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может кто нить подсказать как справиться с проблемой:
мне надо на vc++ написать DLL и использовать ее функции из delphi.
В delphi использую конструкцию:
a:=Loadlibrary('dll');
if a=0 then
begin
ShowMessage('dll not found');
Exit;
end;
p:=getprocaddress(a, '<proc_name>');
if p=nil then
begin
ShowMessage('proc not found');
Exit;
end;
не может найти процедуру как бы я ее не описывал, подскажите, как можно описать функцию в vc++ чтоб я ее таким образом смог использовать в Delphi.
пробывал делать в с++ следующим образом:
#include <windows.h>
#include "1.h"
#define EXPORT extern "C" __declspec (dllexport)
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdReason, PVOID pvReserved)
{
return TRUE;
}
EXPORT int CALLBACK MyFunction(void)
{
MessageBox(NULL,"ads","Function from DLL",MB_OK);
//MessageBox(NULL,str,öFunction from DLLö,MB_OK);
return 1;
}
если можно, скиньте кусок кода на vc.
Заранее благодарен.
...
Рейтинг: 0 / 0
dll vc
    #32241062
relax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
немного исправлю постановку вопроса... удалось таки подключить функцию из dll на vc в delphi, только другая проблема, если параметры функции типа char*, то че надо из дельфи передавать туда???...
...
Рейтинг: 0 / 0
dll vc
    #32241070
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PChar нужно передавать
только не забудь установить соглашение о вызовах Сишное
по мойму это stdcall
...
Рейтинг: 0 / 0
dll vc
    #32241320
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CALLBACK это и есть pascal-соглашение, этого достаточно на стороне DLL
...
Рейтинг: 0 / 0
dll vc
    #32241391
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть, честно говоря сразу не вспомню...
хотя лучше всеж Сишное, оно обычно используется в dll как некий стандарт де-факто (по крайней мере у меня такое впечатление сложилось)
...
Рейтинг: 0 / 0
dll vc
    #32241427
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стандарт де-факто - это как раз stdcall (все винапи ф-ии так описаны), а сишное соглашение - это cdecl. нужно использовать stdcall.
...
Рейтинг: 0 / 0
dll vc
    #32241677
relax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня описана в с++
extern "C" __declspec(dllimport) int Func( int a, char *temp);
а в delphi
function xadduser(a:shortint; temp:PChar): integer; external 'userdll6.dll' name 'Func';
и не работает... че надо исправить , если можно с куском кода плиз:)
...
Рейтинг: 0 / 0
dll vc
    #32241825
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int a
и
a:shortint

Так наверное надо

function xadduser(a:Integer; temp:PChar): integer; stdcall; external 'userdll6.dll' name 'Func';
...
Рейтинг: 0 / 0
dll vc
    #32241858
maratka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> у меня описана в с++
extern "C" __declspec(dllimport) int __stdcall Func( int a, char *temp);
...
Рейтинг: 0 / 0
dll vc
    #32242300
relax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если я описываю _stdcall или CALLBACK, то есдинственное че меняется это
функция становится не func а _func@4, причем при передаче shortint(delphi)
в с описана как short, у меня функция возвращает этот параметр, но завмето
него возвращает все время одно и тоже число, как будьто я ничего и не передаю....:((
кто может выложите кусок кода С++ и Delphi плиз.
...
Рейтинг: 0 / 0
dll vc
    #32242381
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. сишный short это дешный smallint (а не shortint)

2. Так все работает
Код: plaintext
1.
2.
3.
4.
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*){return  1 ;}
extern  "C"  int __stdcall __declspec(dllexport) Func(short a, char *temp){
  return(strlen(temp)+a);
}


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function xadduser(a:smallint; temp:PChar): integer; stdcall; external 'DLL.dll' name 'Func';
...
procedure TForm1.Button1Click(Sender: TObject);
var S:String; n:SmallInt;
begin
  S := '123456';  n := xadduser( 123 ,PChar(S)); MessageBox( 0 ,PChar(IntToStr(n)),'', 0 );
  S := '1234567'; n := xadduser(   1 ,PChar(S)); MessageBox( 0 ,PChar(IntToStr(n)),'', 0 );
  S := '123';     n := xadduser(- 66 ,PChar(S)); MessageBox( 0 ,PChar(IntToStr(n)),'', 0 );
  S := '1234';    n := xadduser( 662 ,PChar(S)); MessageBox( 0 ,PChar(IntToStr(n)),'', 0 );
  S := '';        n := xadduser( 200 ,PChar(S)); MessageBox( 0 ,PChar(IntToStr(n)),'', 0 );
end;
...
Рейтинг: 0 / 0
dll vc
    #32244342
relax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, я уже разобрался, просто я не писал __stdcall...
теперь все работает:)
всем спасибо за помощь!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / dll vc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]