阅读:3788回复:8
使用动态库出现:Debug Assersion Failed(fseek.c),请教大侠
这是32位的程序调用32位的动态库,编写一个简单的C函数调用是成功的,但是添加到下面函数中,就不行。
程序定义了UNICODE。 typedef void (*IUT)(UBYTE *InCFile, UBYTE *InMFile, UBYTE *InYFile, UBYTE *InKFile,UBYTE *OutPrintFile, struct PrintParameter PrintPara); BOOL APIENTRY xxx() { UBYTE InCFile[50];//InCFile,InMFile,InYFile,InKFile是字符串,表示文件的名称; UBYTE InMFile[50]; UBYTE InYFile[50]; UBYTE InKFile[50]; UBYTE OutPrintFile[50]; struct PrintParameter PrintP; HINSTANCE ghDLL = NULL; IUT IUT_Function; ......... ghDLL = LoadLibrary(WorkingINI); ErrorCode = GetLastError(); //ErrorCode = 6. if (ghDLL != NULL) { IUT_Function = (IUT)GetProcAddress(ghDLL, \"PCIMain\"); ErrorCode = GetLastError(); IUT_Function(InCFile, InMFile, InYFile, InKFile, OutPrintFile, PrintP); //运行到上面这句时,出错:? //Debug Assertion Failed! //Program: d:\\Program Files\\microsoftice\\office\\winword.exe //File: fseek.c //Line:101 //EXpression: stream!= NULL FreeLibrary(ghDLL); } } 用NOTEPAD,也出一样的原因,只是Program:换成....Notepad.exe 请问各位是什么原因,谢谢? |
|
沙发#
发布于:2003-07-25 08:42
LoadLibrary的返回值是6?
6 The handle is invalid. ERROR_INVALID_HANDLE 说明你LoadLibrary就没有正常返回。 查一下这一行好了。 ghDLL = LoadLibrary(WorkingINI); 你可以步进跟踪到这里,看ghDLl的值。 |
|
|
板凳#
发布于:2003-07-25 08:47
还有,把IUT_Function定义成全局变量试一下。
|
|
|
地板#
发布于:2003-07-25 08:51
LoadLibrary 失败你的ghDLL就不应该用!
|
|
|
地下室#
发布于:2003-07-25 11:09
首先谢谢关注
loadlibrary()以后,ghDll的值变了,为一固定的值。 将IUT_FUNCTION设为全局变量,结果是一样。 我编了一个小程序,errorcode也为6,但出了结果。 请问为什么? [编辑 - 7/25/03 by chenfresh] |
|
5楼#
发布于:2003-07-25 11:58
UNICODE是在哪定义的,在函数前面?
那WorkingINI是怎么定义?形如#define WorkingINI _T(\"xxx\")? 既然用UNICODE,string都用_T宏包括起来好些。 |
|
6楼#
发布于:2003-07-29 10:29
把你的整个程序打成zip贴上来我看一下。
|
|
|
7楼#
发布于:2003-07-29 10:48
得看全部,这点东西看不出来
|
|
8楼#
发布于:2003-07-29 12:10
谢谢关注,文件已经上载了,请看一下。
|
|
|