求助:DLL引用导入结构体错误

ghy039092 2008-10-15 10:43:30
DLL中的函数表示如下:
long WINAPI WOMRpc1(
HWND *win_no,
struct WOMRpc1_req_st *req_stp,
char *in_data_p)
DLL中结构体结构
typedef struct WOMRpc1_req_st {
char CltAPLName[8];
char ReqProgName[16];
char ConnectSw;
char ChangeSenter;
char ForceSw;
char ReceiveSw;
char SvGroup[31];
char SvName[31];
char ChangeSvGroup[31];
char ChangeSvName[31];
char Reserve1[8];
char MoniterSw;
char Reserve2[3];
char InputStCode[4];
char APCompleteST;
char Reserve3[7];
} WOMRpc1_req_st;

调用DLL的函数中
定义个一个跟DLL中结构体形式一样的结构体WOMRpc1_req_st
struct WOMRpc1_req_st *req_st;
req_st = (WOMRpc1_req_st *)malloc(sizeof(WOMRpc1_req_st));
//对req_st进行负值(省略)

对DLL的调用:
typedef void(*lpWomClCmGetIniF)(HWND *, struct *, char *, long *, char *, long *, long *, long *, char *);
lpWomClCmGetIniF IniFFun;

WOM_Rpc32_DLL = LoadLibraryEx("C:\\nsc\\LIB\\WOMCLM32.dll",NULL,NULL);
if (WOM_Rpc32_DLL <= (HINSTANCE)32)
{
memcpy(msgbox,"WOM902E womclm32.dll初期化設定で重大エラーが発生しました",sizeof(msgbox));
MessageBox(msgbox,"重大エラー",MB_ICONSTOP | MB_TASKMODAL);
exit(-1);
}
IniFFun = (lpWomClCmGetIniF)GetProcAddress(WOM_Rpc32_DLL,"WOMRpc1");
if(IniFFun != NULL)
{
IniFFun(&hwnd,req_st,in_data_p,&in_len,out_data_p,&out_len,&timer,sub_rtcd,err_inf);
//出现了错误,错误原因是,结构体转换不成功
}

各位大虾,如何解决这问题,在线等呀m(_ _)m
...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghy039092 2008-10-16
  • 打赏
  • 举报
回复
问题解决了,把这个声明
typedef void(*lpWomClCmGetIniF)(HWND *, struct *, char *, long *, char *, long *, long *, long *, char *);

改为
typedef void(*lpWomClCmGetIniF)(HWND *, struct WOMRpc1_req_st req_st*, char *, long *, char *, long *, long *, long *, char *);
这样结构体就可以匹配了,
ghy039092 2008-10-15
  • 打赏
  • 举报
回复
DLL中的函数写错了:以下才是DLL中的函数
long WINAPI WOMRpc1(
HWND *win_no,
struct WOMRpc1_req_st *req_stp,
char *in_data_p,
long *in_len,
char *out_data_p,
long *out_len,
long *timer,
long *sub_rtcd,
char *err_inf);
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cyblueboy83 的回复:]
typedef void(*lpWomClCmGetIniF)(HWND *, struct *, char *, long *, char *, long *, long *, long *, char *);
这里和DLL中定义的函数 long WINAPI WOMRpc1 不匹配

先修改成统一的试试 应当在调用方定义一个相同的结构体就可以了
[/Quote]
up
herman~~ 2008-10-15
  • 打赏
  • 举报
回复
typedef void(*lpWomClCmGetIniF)(HWND *, struct *, char *, long *, char *, long *, long *, long *, char *);
这里和DLL中定义的函数 long WINAPI WOMRpc1 不匹配

先修改成统一的试试 应当在调用方定义一个相同的结构体就可以了
机智的呆呆 2008-10-15
  • 打赏
  • 举报
回复
结构体类似 类 要以整体导出,另外WOMRpc1的类型和你定义的函数指针变量不匹配~~~~
ghy039092 2008-10-15
  • 打赏
  • 举报
回复
同志们,我在线都等了一天了!
自己捉摸不出来了,兄弟们,求救下!

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧