Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DLL обертка для вызова функций из статической lib

6 views
Skip to first unread message

Andrew Shelkovenko

unread,
May 22, 2008, 7:42:31 AM5/22/08
to
Hello!

Требуется из Free Basic/ RapidQ basic вызывать функции из сишной
библиотеки NIDAQmx.lib.
Это драйвер для измерительной платы

Фактически мне надо обращаться к ней из приложения на RapidQ basic.
Образец dll мне сделали, она работает сама по себе, из basic вызывается,
значение возвращает.

Проблема в том, что в ней не отрабатывается правильно вызов функции уже из
библиотеки NIDAQmx.lib.

Hемного опишу что есть для одной из функций

вот так функция описывается в NIDAQmx.h для NIDAQmx.lib

int32 __CFUNC DAQmxCreateTask (const char taskName[],
TaskHandle *taskHandle);

функции DAQmxCreateTask передается taskName
и возращается TaskHandle (uint32)

вот так она вызывается из работающего модуля написанного на CPP

//
if (DAQmxCreateTask("",&MyTaskHandle)!=0) ShowMessage("Ошибка подключения");
//

вот кусок кода dll обертки (Borland studio 2006)
//--------------------------------------------------------------------------
-

#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#pragma hdrstop
#define _DLLMAINCPP // обратите на эту строчку внимание (???)
#include "dllmain.h"
#define _APPMAINCPP
#pragma argsused
#include "NIDAQmx.h"

//--------------------------------------------------------------------------
-
DAQmxCreateTask_dll(const char taskName, unsigned long LPMyTaskHandle)
{
// пытаюсь посмотреть, что передалось в качестве taskName
printf("taskName= %s \n",taskName );
ShowMessage(taskName); / показывает одну букву А

unsigned long MyTaskHandle3;
int otv;
{
otv = DAQmxCreateTask(&taskName,&MyTaskHandle3);
LPMyTaskHandle = MyTaskHandle3;
}
return otv;// 10;//
}
//------------------

С cpp/c и их средами дела не имел, поэтомцу возникают чайницкие вопросы

1. выдает предупрежедение
типа LPMyTaskHandle пытается assign to unused value MyTaskHandle3

2. Почему у функции DAQmxCreateTask_dll не указывается тип возвращаемого
значения??

3. чем отличается const char taskName[] в описании функции NIDAQmx.h
от const char taskName в определении функции в Dll?


Может сразу видно, что что-то неправильно?


With best regards, Andrew Shelkovenko.
RQ SpamFinish Lite - http://spamfinish.miraxem.com

Sergei Andreev

unread,
May 22, 2008, 10:35:21 AM5/22/08
to
> 1. выдает предупрежедение
> типа LPMyTaskHandle пытается assign to unused value MyTaskHandle3
Hасколько я вижу, MyTaskHandle3 явно лишняя, её спокойно
можно выбросить, а вместо неё использовать LPMyTaskHandle.
По-моему, компилятор именно это и пытается сказать.

> 2. Почему у функции DAQmxCreateTask_dll не указывается тип возвращаемого
> значения??

Hу, укажи. Лучше всего long

> 3. чем отличается const char taskName[] в описании функции NIDAQmx.h
> от const char taskName в определении функции в Dll?

Должно быть const char taskName[]


Andrew Shelkovenko

unread,
May 23, 2008, 3:41:31 AM5/23/08
to
Hello, Sergei!

You wrote to Andrew Shelkovenko on Thu, 22 May 2008 14:35:21 +0000 (UTC):

>> 1. выдает предупрежедение
>> типа LPMyTaskHandle пытается assign to unused value MyTaskHandle3

SA> Hасколько я вижу, MyTaskHandle3 явно лишняя, её спокойно
SA> можно выбросить, а вместо неё использовать LPMyTaskHandle.
SA> По-моему, компилятор именно это и пытается сказать.

Попробую.

>> 2. Почему у функции DAQmxCreateTask_dll не указывается тип
>> возвращаемого
>> значения??

SA> Hу, укажи. Лучше всего long

OK

>> 3. чем отличается const char taskName[] в описании функции NIDAQmx.h
>> от const char taskName в определении функции в Dll?

SA> Должно быть const char taskName[]

Да вот я тоже думаю, это ведь должен быть массив байт..

Спасибо за ответ.

0 new messages