主程序中声明一个函数指针 然后传入Dll中,由Dll调用
Dll中声明如下:
typedef void (CALLBACK * GetDllCmd) (char * a_sCmd);_declspec(dllexport) int InitSys(GetDllCmd pFunc)
{
}主程序中声明如下:
void CALLBACK GetDllCmd(char * a_sCmd)
{
...;
}__declspec(dllimport) int InitSys(GetDllCmd);调用:
InitSys(GetDllCmd);这种调用方法是错在哪里啊 高手指点下

解决方案 »

  1.   

    error C2491: “InitSys” : 不允许 dllimport 数据 的定义
    error C2440: “初始化” : 无法从“void (__stdcall *)(char *)”转换为“int”
      

  2.   

    exe的源代码中
    是不是没有加typedef void (CALLBACK * GetDllCmd) (char * a_sCmd);
      

  3.   

    类型声明,否则编译器不知道__declspec(dllimport) int InitSys(GetDllCmd);中GetDllCmd是什么
      

  4.   

    主程序中声明如下:
    void CALLBACK GetDllCmd(char * a_sCmd)
    {
    ...;
    }__declspec(dllimport) int InitSys(GetDllCmd);调用:
    InitSys(GetDllCmd);这样声明不对
    隐式加载:
    void CALLBACK GetDllCmdFun(char * a_sCmd)
    {
    ...;
    }
    InitSys(GetDllCmdFun);
      

  5.   

    InitSys是dll中的函数,要先声明
      

  6.   

    include dll的头文件时,已经声明了
      

  7.   

    有啊 
    __declspec(dllimport) int InitSys(GetDllCmd);
    这个就是include头文件里的
      

  8.   

    头文件里有没有typedef void (CALLBACK * GetDllCmd) (char * a_sCmd);
      

  9.   

    头文件是这样
    extern typedef void (CALLBACK * GetDllCmd) (char * a_sCmd);
    __declspec(dllimport) int InitSys(GetDllCmd pFunc);
      

  10.   

    改成
    typedef void (CALLBACK * GetDllCmd) (char * a_sCmd);
    __declspec(dllimport) int InitSys(GetDllCmd pFunc);
      

  11.   

    exe头文件
    extern typedef void (CALLBACK * GetDllCmd) (char * a_sCmd);
    __declspec(dllimport) int InitSys(GetDllCmd pFunc);exe的声明和调用
    void CALLBACK GetDllCmd(char * a_sCmd)
    {
    ...;
    }调用:
    InitSys(GetDllCmd);----------------------------------------------------------------------------
    dll声明
    typedef void (CALLBACK * GetDllCmd) (char * a_sCmd);_declspec(dllexport) int InitSys(GetDllCmd pFunc)
    {
    }
      

  12.   

    去掉之后:
    error C2470: “GetDllCmd” : 看起来像函数定义,但没有形参表;跳过明显的函数体
    error C2275: “GetDllCmd” : 将此类型用作表达式非法
      

  13.   

    你不要把typedef的名字和函数实现的名字弄成一样的
    typedef void (CALLBACK * GetDllCmda) (char * a_sCmd);
    __declspec(dllimport) int InitSys(GetDllCmda pFunc);exe的声明和调用
    void CALLBACK GetDllCmd(char * a_sCmd)
    {
    ...;
    }调用:
    InitSys(GetDllCmd);
      

  14.   

    那我exe头文件里 怎么声明dll的引入函数
      

  15.   

    exe用的头文件:typedef void (CALLBACK * GetDllCmda) (char * a_sCmd);
    __declspec(dllimport) int InitSys(GetDllCmda pFunc);c文件:void CALLBACK GetDllCmd(char * a_sCmd)
    {
    ...;
    }
    InitSys(GetDllCmd);
    dll的不变