首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

DLL与EXE传递空指针有关问题

2012-01-11 
DLL与EXE传递空指针问题我的DLL中有函数:externC __declspec(dllexport)XX*JLDA()返回一个NULL的指针但

DLL与EXE传递空指针问题
我的DLL中有函数:
extern   "C "   __declspec(dllexport)   XX*   JLDA()
返回一个NULL的指针
但是在EXE中当
XX*   A;
A   =   JLDA();
if判断后A却不是NULL;为啥?

[解决办法]
没指定调用规则,看看这有没有影响。

另外,你可以在执行A = JLDA();的时候断点查看调用的汇编,JLDA()中应该有
mov eax, 0
ret
或等效指令,
在call JLDA之后应该有
mov [ebp+4], eax //返回值送A,[ebp+4]为局部变量A在栈中地址,可能会有不同如[ebp+8]等
看看此时eax是0吗
[解决办法]
调用约定也是需要的,再看看你反回的指针是否无效
[解决办法]
你可以试试:
dll文件:
头文件
#ifdef TEST_H_H
#else
#define TEST_H_H extern "C " _declspec(dllimport)
#endif

TEST_H_H int* aa();
实现文件:
#define TEST_H_H extern "C " _declspec(dllexport)
#include "666.h "
#include <stdio.h>

int * aa()
{
return NULL;
}

测试程序代码:
int main(int argc, char* argv[])
{
int * a;
int m=0;
a=&m;
a=aa();
if(a==NULL)
cout < < "aaaaaaa " < <endl;
return 0;
}
[解决办法]
和你的DLL有关,需要使用 相同的调用约定

热点排行