Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2009, 13:47   #1
Bobby
 
Регистрация: 31.03.2009
Сообщений: 9
Печаль Вызов из Delhpi функции из API-шки, сделанной в С++. Помогите разобраться

Здравствуйте всем!!!
Вот такая проблема. Есть сишная dll-ка, к которой надо достучаться и запустить некую функцию. В фунуцию передается структура сишная. Я в Сях не силен и смотрю на сишный исходник, как баран на новые ворота. Вся эта бадяга состоит из 3-х файлов:
1. amfxapi.h -- основной файл заголовка
2. amfxapiхх.h, amfxapiхх.срр -- C++ - ная обертка всего этого.

amfxapi.h -- Здесь задается описание всех структур, в том числе структуры AMFXSvrConnParams, которую дано передать

в amfxapiхх.срр идет непосредственно обращение к функциям. Для начала нужна функция amfxConnect, в которую параметром передается структура AMFXSvrConnParams.

На сколько я понимаю, необходимо:
1. задать тип RECORD, аналог структуры, с указанием типов
2. Объявить функцию с указанием типа вызова
3. вызвать нужную функцию.

Делал примерно вот так:

Объявял типы:
Код:
type
TAMFXSvrConnParams= packed record // описание структуры
server: pchar;
port,useSSL,useCrypto: integer;
accountId,userId,passwd: pchar;
end; 

type
TamfxConnect=function(AMFXSvrConnParams:TAMFXSvrCo nnParams): Integer; cdecl; //Описание функции

Непосредственно вызов функции:


procedure TFormF1.Button1Click(Sender: TObject);
const
  server : Pchar = '195.128.74.8';
  accountId : Pchar = '13230';
  userId : Pchar = 'fxdemo13230';
  passwd : Pchar = '0dfc7';
var
isconnect: integer;

begin
  DLLHandle := LoadLibrary('amfxapi.dll');
  if DLLHandle >0 then
    begin
      @connparam:=GetProcAddress(DLLHandle, 'amfxConnect');
      if Assigned(connparam) then
      begin
        AMFXSvrConnParams.server:=server;
        AMFXSvrConnParams.port:=3110;
        AMFXSvrConnParams.useSSL:=1;
        AMFXSvrConnParams.useCrypto:=0;
        AMFXSvrConnParams.accountId:=accountId;
        AMFXSvrConnParams.userId:=userId;
        AMFXSvrConnParams.passwd:=passwd;
        isconnect:=connparam(AMFXSvrConnParams);
      end;
    end;
end;
При вызове функции
isconnect:=connparam(AMFXSvrConnPar ams); вылетает Access violation....
Причин может быть миллион, не правильно переданы параметры, не те типы, не то объявление...

Помогите, кто чем может!!!!!!!!!!!!! Заранее благодарен!!!!

P.S. Во вложении исходники АПИ-шки.
1. amfxapi.h -- основной файл заголовка
2. amfxapiхх.h, amfxapiхх.срр -- C++ - ная обертка всего этого.

amfxapi.h -- Здесь задается описание всех структур, в том числе структуры AMFXSvrConnParams, которую дано передать

в amfxapiхх.срр идет непосредственно обращение к функциям. Для начала нужна функция amfxConnect, в которую параметром передается структура AMFXSvrConnParams.
Вложения
Тип файла: txt amfxapi_h.txt (12.2 Кб, 127 просмотров)
Тип файла: txt amfxapicxx_cpp.txt (12.2 Кб, 121 просмотров)
Тип файла: txt amfxapicxx_h.txt (7.0 Кб, 121 просмотров)

Последний раз редактировалось rpy3uH; 31.03.2009 в 18:33.
Bobby вне форума Ответить с цитированием
Старый 31.03.2009, 18:54   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если не ошибаюсь, то сигнатура функции amfxConnect должна быть такая

Код:
int amfxConnect(AMFXSession, const AMFXSvrConnParams *p);
т.е. два параметра. первый параметр это указатель, так как объявление типа AMFXSession такое
Код:
typedef void * AMFXSession;
и второй параметр тоже указатель

значит на Delphi так
Код:
TAMFXSvrConnParams= packed record 
  server: pchar;
  port,useSSL,useCrypto: integer;
  accountId,userId,passwd: pchar;
end; 
PAMFXSvrConnParams = ^ TAMFXSvrConnParams;

TamfxConnect=function(a:pointer;AMFXSvrConnParams:PAMFXSvrConnParams): Integer; cdecl;

Последний раз редактировалось rpy3uH; 31.03.2009 в 18:57.
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов произвольной функции из DLL Роман Радер Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 05.03.2010 22:35
Вызов функции MarSeON PHP 2 01.08.2008 20:22
Вызов процедуры при обьявлении функции ivannikov Общие вопросы Delphi 6 12.03.2008 13:20
Автоматический вызов функции класса Flaton Общие вопросы C/C++ 4 19.10.2007 17:56
Вызов функции по таймеру Lexicss Общие вопросы Delphi 4 30.05.2007 22:47