Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / dll vc / 12 сообщений из 12, страница 1 из 1
19.08.2003, 23:38
    #32240950
relax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
может кто нить подсказать как справиться с проблемой:
мне надо на 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
20.08.2003, 08:30
    #32241062
relax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
немного исправлю постановку вопроса... удалось таки подключить функцию из dll на vc в delphi, только другая проблема, если параметры функции типа char*, то че надо из дельфи передавать туда???...
...
Рейтинг: 0 / 0
20.08.2003, 08:37
    #32241070
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
PChar нужно передавать
только не забудь установить соглашение о вызовах Сишное
по мойму это stdcall
...
Рейтинг: 0 / 0
20.08.2003, 10:43
    #32241320
vdimas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
CALLBACK это и есть pascal-соглашение, этого достаточно на стороне DLL
...
Рейтинг: 0 / 0
20.08.2003, 11:05
    #32241391
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
может быть, честно говоря сразу не вспомню...
хотя лучше всеж Сишное, оно обычно используется в dll как некий стандарт де-факто (по крайней мере у меня такое впечатление сложилось)
...
Рейтинг: 0 / 0
20.08.2003, 11:16
    #32241427
maratka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
стандарт де-факто - это как раз stdcall (все винапи ф-ии так описаны), а сишное соглашение - это cdecl. нужно использовать stdcall.
...
Рейтинг: 0 / 0
20.08.2003, 12:58
    #32241677
relax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
у меня описана в с++
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
20.08.2003, 14:04
    #32241825
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
int a
и
a:shortint

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

function xadduser(a:Integer; temp:PChar): integer; stdcall; external 'userdll6.dll' name 'Func';
...
Рейтинг: 0 / 0
20.08.2003, 14:20
    #32241858
maratka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
> у меня описана в с++
extern "C" __declspec(dllimport) int __stdcall Func( int a, char *temp);
...
Рейтинг: 0 / 0
20.08.2003, 18:05
    #32242300
relax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
если я описываю _stdcall или CALLBACK, то есдинственное че меняется это
функция становится не func а _func@4, причем при передаче shortint(delphi)
в с описана как short, у меня функция возвращает этот параметр, но завмето
него возвращает все время одно и тоже число, как будьто я ничего и не передаю....:((
кто может выложите кусок кода С++ и Delphi плиз.
...
Рейтинг: 0 / 0
20.08.2003, 19:17
    #32242381
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
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
22.08.2003, 11:31
    #32244342
relax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dll vc
спасибо, я уже разобрался, просто я не писал __stdcall...
теперь все работает:)
всем спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / dll vc / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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