delphi的dll接口函数原形为Function  DLL_get_addata_much_f(muchcnt:integer;var adbuff:array of single;var adlen:integer ):integer; stdcall;在vc里如何调用???? 请大牛赐教

解决方案 »

  1.   

    int __stdcall  DLL_get_addata_much_f(int muchcnt,BYTE *adbuff,int adlen);
      

  2.   

    int (_stdcall *DLL_get_addata_much_f)(int muchcnt,float *adbuff,int adlen);
    int iAD_datalen;
    float AD_data[32767]; 
    HINSTANCE hDLLUSB1801;
    bool bDLLUSB1801=false;
    hDLLUSB1801=::LoadLibrary("Pusb1801dll.dll");
    if( ! hDLLUSB1801 )
    {
          bDLLUSB1801=false;
          return;
    }
    else
    {   
         if (GetProcAddress(hDLLUSB1801,"DLL_get_addata_much_f")!=NULL)
         {
            (FARPROC)DLL_get_addata_much_f=GetProcAddress(hDLLUSB1801,"DLL_get_addata_much_f");
        DLLUSB1801_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);}老出错啊
      

  3.   

    在dll里是:Function  DLL_get_addata_much_f(muchcnt:integer;var adbuff:array of single;var adlen:integer ):integer; stdcall;
    var
    i:integer;
    begin
         get_addata_much(muchcnt);
         for i:=0 to iAD_datalen-1 do
          adbuff[i]:= fAD_data[i];     adlen:=iAD_datalen;
         result:=iAD_datalen;
    end;
      

  4.   

    DLLUSB1801_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);
      函数名是不是写错了, DLL_get_addata_much_f这个吧
    好像你的这里动态调用DLL与标准的不太一样,看看MSDN的例子,比较下另外,你应该帖出具体是什么错误啊
      

  5.   

    应该如何标准动态调用DLL???Function  DLL_get_addata_much_f(muchcnt:integer;var adbuff:array of single;var adlen:integer ):integer; stdcall;
    var
    i:integer;
    begin
         get_addata_much(muchcnt);
         for i:=0 to iAD_datalen-1 do
          adbuff[i]:= fAD_data[i];     adlen:=iAD_datalen;//==256
         result:=iAD_datalen;
    end;int (_stdcall *DLL_get_addata_much_f)(int muchcnt,float *adbuff,int adlen);
    int iAD_datalen;
    float AD_data[32767]; 
    HINSTANCE hDLLUSB1801;
    bool bDLLUSB1801=false;
    hDLLUSB1801=::LoadLibrary("Pusb1801dll.dll");
    if( ! hDLLUSB1801 )
    {
          bDLLUSB1801=false;
          return;
    }
    else
    {   
         if (GetProcAddress(hDLLUSB1801,"DLL_get_addata_much_f")!=NULL)
         {
            (FARPROC)DLL_get_addata_much_f=GetProcAddress(hDLLUSB1801,"DLL_get_addata_much_f");
           Dll_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);       int i= iAD_datalen;//iAD_datalen 的值总不对 啊 
         }
       
    }
      

  6.   

    if (GetProcAddress(hDLLUSB1801,"DLL_get_addata_much_f")!=NULL)
         {
            (FARPROC)DLL_get_addata_much_f=GetProcAddress(hDLLUSB1801,"DLL_get_addata_much_f");
           //参数不是指针,值传不出来。
           int i= Dll_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);
           //现在看看i的值是否正确。     }
       
      

  7.   

    int i= Dll_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);
    第一次考验,第二次就不对了,我要循环10次为何在delphi里就可以传出来??
      

  8.   

    int i= Dll_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);
    第一次对,第二次就不对了,我要循环10次为何在delphi里就可以传出来??
      

  9.   

    int i= Dll_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);
    第一次对,第二次就不对了,我要循环10次为何在delphi里就可以传出来??
      

  10.   

    那你只好反汇编看看dephi中 Dll_get_addata_much_f 函数中iAD_datalen传的是数值,还是指针了。当然可以直接使用指针测试一下;
      

  11.   

    另外看delphi中get_addata_much(muchcnt);对Dll_get_addata_much_f 的使用进行了封装,建议还是跟踪进取看看,具体是怎么一回事。
      

  12.   

    反汇编??"另外看delphi中get_addata_much(muchcnt);对Dll_get_addata_much_f 的使用进行了封装,建议还是跟踪进取看看,具体是怎么一回事。
    " 我没有看明白
      

  13.   

    你没看见get_addata_much只有一个参数,而Dll_get_addata_much_f要三个参数?
      

  14.   

    get_addata_much 是DLL内部函数呀
      

  15.   

    看错了,那么Dll_get_addata_much_f返回值就是读取的数据,这就没有错了。
    至于第一次对,第二次就不对了,应该是你的循环代码不对。
      

  16.   

    while (STOP_SAMP != 11)
    {
    int i= Dll_get_addata_much_f(itemp,&AD_data[0],iAD_datalen);
    STOP_SAMP=STOP_SAMP + 1; 
    }
    循环到第二次就出问题
      

  17.   

    Function  DLL_get_addata_much_f(muchcnt:integer;var adbuff:array of single;var adlen:integer ):integer; stdcall;
    integer不是标准的数据类型,它只是delphi里面的东东,将integer改为int32