50分求借dll的编写问题 这样的程序,我都是声明一个char数组,定义的指针,在返回后,值就被清除了。外面的程序无法取得返回的结果。such as:char prt[255]; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 prt=new char(a value); 这是什么东西 写错了吧建议写成GetStrFromInt(int value ,char *strPtr)形式 这样在这里就不要考虑释放问题了 delete 用来删除new 分配的内存。且这两个关键字必须配对使用。 delete[] 用来删除new 分配数组的内存 试试在调用该函数之前就分配好空间,而不要在该函数的栈里分配。比如MYDLL_API char* GetStrFromInt(int value,char *ptr) { ... ... return prt; }调用时:.....char* ptr = new char[];ptr = GetStrFromInt(0,ptr);..... 这么基本的错误也不知道,你声明的局部变量prt在函数返回后就不可用了,所以程序要出问题。 返回时是越栈操作,因为ptr分配在堆里,如果exe和dll都链接到dll的运行期库是没有问题的,但是他们中有一个或者都链接静态链接库,就会出错。 雪松朋友您错了,用NEW生成的内存在函数结束后仍然可用(前提是没有用delete 删除)。很多c++问题不能想当然,需要实践才能说话。 同意turongguo(无痕雨) 只是这样这段内存要释放就比较嘛烦了 turongguo的做法我认为是对的。因为ptr时函数内部中定义后就用new操作分配空间的。何不先定义,对函数而言是个全局量,函数给把指针赋值后返回后在删去空间(delete)这样空间的分配就不会释放不了了。 MYDLL_API char* GetStrFromInt(int value,char *ptr) { ... ... return prt; }调用时:.....char* ptr = new char[];ptr = GetStrFromInt(0,ptr);.....if(ptr){delete ptr;} 是不是要实现int to string?char intStr[20];sprintf(intStr, "%d", intValue); 谢谢attackboy(我像是飘在城市的一片尘埃),我忘了释放了。WINDOWS核心编程里有很好的描述,不过我也该复习一下了。 建议你使用NEW和来完成此项任务!! 天那!我发现这个dll函数没有写错,不过要如下这样才能才能获取函数指针....typedef char* (* _GetStrFromInt)(int);_GetStrFromInt GetStrFromInt;GetStrFromInt=(_GetStrFromInt)GetProcAddress(MyDll,"?GetStrFromInt@@YAPADH@Z");参数里的函数名是从vc工具depend里拷贝过来的。这是什么原因啊? 你要用GlobalAlloc函数申请内存,而不是NEW函数,因为DLL与EXE不在相同的内存空间 哦,原来和内存分配没有关系.是不是MYDLL_API没有定义为extern "C"?我这么写的函数,VC6编译通过,能通过直接调用函数名调用GetStrFromInt.别忘了要在同一模块之中释放.#define MYDLL_API extern "C" __declspec(dllexport)MYDLL_API char* GetStrFromInt(int value) { char *prt=NULL; prt=new char[10]; return prt; }MYDLL_API char* FreeStr(char *ptr){if (ptr){free ptr;ptr=NULL;}return ptr;} 网络编程的问题 关于ping命令程序的疑惑 c++,mysql,插入中文记录,乱码,经过一天半的搜索与寻找还是没有把问题搞清楚。 杀毒软件与杀木马软件在设计上有何不同? combo list中添加项目顺序 odbc 的问题!!,跪求答案!! 鼠标左健按住static text控件拖动 1000分求:后台(多线程)读取网上文件的例子 [蓝牙]用socket实现pc之间的数据信息传输 重提: 怎样自画 ListCtrl 的 Scroll bar,大家发表意见 程序最小化的消息是什么? 24色图像问题
这是什么东西 写错了吧建议写成GetStrFromInt(int value ,char *strPtr)形式 这样在这里就不要考虑释放问题了
MYDLL_API char* GetStrFromInt(int value,char *ptr)
{
...
...
return prt;
}调用时:
.....
char* ptr = new char[];
ptr = GetStrFromInt(0,ptr);
.....
如果exe和dll都链接到dll的运行期库是没有问题的,但是他们中有一个或者都链接静态链接库,就会出错。
只是这样这段内存要释放就比较嘛烦了
{
...
...
return prt;
}调用时:
.....
char* ptr = new char[];
ptr = GetStrFromInt(0,ptr);
.....
if(ptr){delete ptr;}
sprintf(intStr, "%d", intValue);
不过要如下这样才能才能获取函数指针....
typedef char* (* _GetStrFromInt)(int);
_GetStrFromInt GetStrFromInt;GetStrFromInt=(_GetStrFromInt)GetProcAddress(MyDll,"?GetStrFromInt@@YAPADH@Z");
参数里的函数名是从vc工具depend里拷贝过来的。
这是什么原因啊?
MYDLL_API char* GetStrFromInt(int value)
{
char *prt=NULL;
prt=new char[10];
return prt;
}
MYDLL_API char* FreeStr(char *ptr)
{
if (ptr)
{free ptr;ptr=NULL;}
return ptr;
}