下面是我使用的dll的头文件
#define UPGRADE
#ifndef CMPP_API_H
#define CMPP_API_Hextern "C"{#define CMPP_API __declspec(dllexport)
#ifdef UPGRADE
CMPP_API dpl_status_t cmpp_recv(conn_desc *conn,cmppe_packet *cp,dpl_uint8_t is_break, dpl_uint32_t *seq);
CMPP_API dpl_status_t cmpp_submit(conn_desc *conn,cmppe_submit *cs,dpl_uint32_t *seq);
#else
CMPP_API dpl_status_t cmpp_recv(conn_desc *conn,cmppe_packet *cp,dpl_uint8_t is_break);
CMPP_API dpl_status_t cmpp_submit(conn_desc *conn,cmppe_submit *cs);
#endif
CMPP_API dpl_status_t cmpp_deliver_resp(conn_desc *conn,dpl_uint32_t pk_seq,dpl_uint32_t status);
CMPP_API dpl_status_t cmpp_cancel(conn_desc *conn,cmppe_cancel *cc);
CMPP_API dpl_status_t cmpp_active_test(conn_desc *conn);
CMPP_API dpl_status_t cmpp_logout(conn_desc *conn);
CMPP_API dpl_status_t cmpp_login(conn_desc *conn,cmppe_login *cl);
CMPP_API dpl_status_t cmpp_connect_to_ismg(char *host,dpl_port_t port,conn_desc *conn);
CMPP_API dpl_status_t cmpp_disconnect_from_ismg(conn_desc *conn);
CMPP_API dpl_status_t cmppe_submit_sm_init(cmppe_submit *msg);
CMPP_API dpl_status_t cmppe_submit_sm_set_shortmsg(cmppe_submit *msg, void *short_msg, dpl_uint8_t size);
CMPP_API dpl_status_t cmppe_submit_sm_set_priority(cmppe_submit *msg, dpl_uint8_t priority);
CMPP_API dpl_status_t cmppe_submit_sm_set_msgmode (cmppe_submit *msg, dpl_uint8_t msg_mode);
CMPP_API dpl_status_t cmppe_submit_sm_set_protoid (cmppe_submit *msg, dpl_uint8_t proto_id);
CMPP_API dpl_status_t cmppe_submit_sm_set_dcs     (cmppe_submit *msg, dpl_uint8_t dcs);
CMPP_API dpl_status_t cmppe_submit_sm_set_schedule(cmppe_submit *msg, const char *schedule);
CMPP_API dpl_status_t cmppe_submit_sm_set_validate(cmppe_submit *msg, const char *validate);
CMPP_API dpl_status_t cmppe_submit_sm_set_src_addr(cmppe_submit *msg, char *msisdn);
CMPP_API dpl_status_t cmppe_submit_sm_add_dst_addr(cmppe_submit *msg, char *msisdn);
CMPP_API dpl_status_t cmppe_submit_sm_set_icp_id  (cmppe_submit *msg, char *icp_id);
CMPP_API dpl_status_t cmppe_submit_sm_set_svc_type(cmppe_submit *msg, char *svc_type);
CMPP_API dpl_status_t cmppe_submit_sm_set_fee_type(cmppe_submit *msg, dpl_uint8_t fee_type);
CMPP_API dpl_status_t cmppe_submit_sm_set_info_fee(cmppe_submit *msg, dpl_uint32_t info_fee);
CMPP_API dpl_status_t cmppe_submit_sm_set_fee_user(cmppe_submit *msg,dpl_uint8_t fee_utype,char *fee_usr);CMPP_API dpl_status_t cmppe_cancel_sm_init(cmppe_cancel *msg);
CMPP_API dpl_status_t cmppe_cancel_sm_set_msg_id(cmppe_cancel *msg, char *msg_id);}#endif在win32控制台程序中能够正常使用,但在mfc(exe)中使用该dll时,将头文件包含到
工程中时,出现下面的错误:
error C2146: syntax error : missing ';' before identifier 'cmpp_recv'
error C2501: 'dpl_status_t' : missing storage-class or type specifiers
fatal error C1004: unexpected end of file found
Error executing cl.exe.GsmServer.exe - 3 error(s), 0 warning(s)
能解决的给300分。

解决方案 »

  1.   

    dpl_status_t 在那里定义了?
      

  2.   

    在你的mfc(exe)包含这个头文件之前包含定义dpl_status_t的头文件。
      

  3.   

    有以下可能错误:你的头文件不能放到预编译头文件前面;
    dpl_status_t类型没有定义;
      

  4.   

    dpl_status_t 应该是在dll中定义的。
    如果头文件不能放到预编译头文件前面,应该放到哪个位置?
    在w32控制台程序中,一切顺利。在mfc中却出现了这种问题,不通呀。
      

  5.   

    我想是不是隐式调用dll时,没有连接到lib的缘故?
    我是这样做的:
    1、将dll放在可执行文件目录
    2、将lib文件放在工程目录
    3、在工程中加入lib文件和头文件
    4、将头文件包含在stdafx.h中
    5、设置project->setting->link->对象/模块库=lib文件名。
    请问有什么错吗?是否mfc程序在调用dll时有什么要注意的地方
      

  6.   

    似乎是没有连接到dll,可能是连接库文件lib的问题,但在mfc中应该如何做呢?