Требуется из 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
> 2. Почему у функции DAQmxCreateTask_dll не указывается тип возвращаемого
> значения??
Hу, укажи. Лучше всего long
> 3. чем отличается const char taskName[] в описании функции NIDAQmx.h
> от const char taskName в определении функции в Dll?
Должно быть const char taskName[]
>> 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[]
Да вот я тоже думаю, это ведь должен быть массив байт..
Спасибо за ответ.