VC6.0环境
Dll中程序如下:
dlltest.dll:
void aa(char** str)
{
*str="eeeee";
}
调用程序如下:
test.exe:
void main()
{
char *str="aaaa";
HINSTANCE hTest=NULL;
hTest=LoadLibrary("dlltest.dll");
typedef int (*paa)(char** str);
paa aa;
aa=(paa)GetProcAddress(hTest,"aa");
aa(&str);
printf("%s\n",str);
}
cl通过,但执行时报”内存不能读“,但是两者在同一程序里(如下)则执行没问题:
test1.exe:
void aa(char** str)
{
*str="eeeee";
}
void main()
{
char *str="aaaa";
aa(&str);
printf("%s\n",str);
}
这时输出结果为:eeeee
另外,一个问题是:把Test1.exe改成如下:
test2.exe
void aa(char* str)
{
str="eeeee";
}
void main()
{
char *str="aaaa";
aa(str);
printf("%s\n",str);
}
这是输出结果为:aaaa,而不是eeeee,这里传的不是地址吗?
Dll中程序如下:
dlltest.dll:
void aa(char** str)
{
*str="eeeee";
}
调用程序如下:
test.exe:
void main()
{
char *str="aaaa";
HINSTANCE hTest=NULL;
hTest=LoadLibrary("dlltest.dll");
typedef int (*paa)(char** str);
paa aa;
aa=(paa)GetProcAddress(hTest,"aa");
aa(&str);
printf("%s\n",str);
}
cl通过,但执行时报”内存不能读“,但是两者在同一程序里(如下)则执行没问题:
test1.exe:
void aa(char** str)
{
*str="eeeee";
}
void main()
{
char *str="aaaa";
aa(&str);
printf("%s\n",str);
}
这时输出结果为:eeeee
另外,一个问题是:把Test1.exe改成如下:
test2.exe
void aa(char* str)
{
str="eeeee";
}
void main()
{
char *str="aaaa";
aa(str);
printf("%s\n",str);
}
这是输出结果为:aaaa,而不是eeeee,这里传的不是地址吗?
不好意思,我是个初学者,这种指针调用方式我试了很多次,都是内存不能读,我都没着了,请问您有通过参数从DLL中传回要修改的变量值的方法吗?请问skyruan(阿狼) :
函数体里指针参数的副本与传进去的参数是同名吗?
语句str="eeeee";应该只是付值吧,怎么把地址也改了呢?