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有关,需要使用 相同的调用约定