// iTween.cpp : 定义 DLL 应用程序的导出函数。
char dogOnlyId[30] = “314A990D1A6E4D0F”;
extern “C” DLL_API void ReadDogOnlyId(char *getDogOnlyId)
{
getDogOnlyId = dogOnlyId;
}
编译为 iTween.dll
// Test1.cpp : 定义 DLL 应用程序的导出函数。
char dogOnlyId[64] = “314A990D1A60F”;
extern “C” DLL_API int readNumber()
{
HINSTANCE hDllInst = LoadLibrary(“iTween.dll”);
typedef void (WINAPI *FunReadDogOnlyId)(char *);
FunReadDogOnlyId MyReadDogOnlyId = NULL;
MyReadDogOnlyId = (FunReadDogOnlyId)GetProcAddress (hDllInst, “ReadDogOnlyId”);
MyReadDogOnlyId(dogOnlyId);
FreeLibrary(hDllInst);
}
编译为 Test1.dll
现在情况是,本人在别的程序调用 Test1.dll 的 readNumber()
当执行 MyReadDogOnlyId(dogOnlyId);
dogOnlyId 得不到正确的值
假如
extern “C” DLL_API void ReadDogOnlyId(char *getDogOnlyId)
{
getDogOnlyId = dogOnlyId;
}
变为
extern “C” DLL_API void ReadDogOnlyId(char *getDogOnlyId)
{
strncpy(getDogOnlyId, dogOnlyId, 30);
}
则可以得到正确的 值
莫非
getDogOnlyId = dogOnlyId;
不是传址吗?
怎么才能是传址?
谢谢!
20
extern “C” DLL_API void ReadDogOnlyId(char **getDogOnlyId)
{
*getDogOnlyId = dogOnlyId;
}
20
不是参数为指针就叫按地址传递,参数不为指针就按值传
40
否则你的T在函数中只是一个复制品,你修改不会影响到实参
所以要修改一个指针,要传入指针的指针
20
1、传指针:是为了修改指针指向的内容,修改不了指针本身(原因是指针本身是传值)
2、传指针的指针:是为了修改指针指向年内容(指针),
40
假如仅仅改变指向指向的内容,传一级指针就行了(值传递)
#include<iostream> using namespace std; void fun1(char *p) { p = "ddd"; } void fun2(char **p) { *p = "fff"; } void main() { char *a = "sdf"; fun1(a); cout << a << endl; fun2(&a); cout << a << endl; }
fun1函数并不能改变实参a的指向,原因是实参a和形参p并不是同一个指针,他们只是指向了同一个字符串”sdf”而已
10
人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……