如题,下面是VC的声明。一个DLL的  {* @brief 选中摄像机控制通道打开/关闭
  * @param bCtrlStart TRUE-打开控制通道,FALSE-关闭控制通道
  * @return 1 成功, -1 失败}extern "C" {
  ...
  ...
  int __declspec(dllexport) CYNET_CtrlStart(BOOL bCtrlStart);
  ...
  ...
}
这个是我声明的函数类型。我想LoadLibrary,再去GetProcAddress,来动态调用。
  TCYNET_CtrlStart = function(bCtrlStart: Boolean): Integer;cdecl;问题
1.我这样的声明,是否正确?
2.能不能使用动态载入的方式去调用?
3.由于这DLL还有其他函数,部分函数调用都正常,而只是这个CYNET_CtrlStart(BOOL bCtrlStart)函数调用时,总是返回0(失败),很纠结中。

解决方案 »

  1.   

    看起来没问题,用c语言调用是否成功
    vc的BOOL实际上是int
      

  2.   

    难道是条用约定的问题???stdcall???
      

  3.   

    采用系统的基础数据, 不要采用任何语言的数据, DELPHI有完整的系统数据类型的, 跟VC的一样.
    发布的接口或函数, 想兼容性好就全部都 stdcall
    VC的函数不能直接返回接口类型, 普通指针要吧, 但接口类型的都不行
      

  4.   

    请看另一个函数,  {* @brief 添加指定IP摄像机
      * @param *ip 准备添加到库的摄像机的IP地址
      * @param portc 准备添加到库的摄像机的控制端口
      * @param ports 准备添加到库的摄像机的传输端口
      * @return 1 成功, -1 失败
      * @par 示例:
      * @code
      *   CYNET_AddCamera(ip, 8886, 8888);
      *   CYNET_SelectCamera(ip);
      * @endcode
      int __declspec(dllexport) CYNET_AddCamera(char *ip, USHORT portc, USHORT ports);}下面是我用delphi的声明。  TCYNET_AddCamera = function(pcIp: PChar; nPortc: Word; nPorts: Word): Integer;cdecl;不知pcIp翻成PChar,怎么样。
    USHORT应该也是WORD的类型吧?0-65535 这样?
      

  5.   

    pchar,word没什么问题
    unsigned short 对应 delphi的word
      

  6.   

    呵呵,问题解决,函数翻译没有问题,是vc程序用了winsock2的库,在Delphi下,找了个winsock2.pas的,可以控制了。谢谢各位,散分。