VC2005 DLL调用 DLL 返回字符的问题

hmis168 2009-01-13 05:40:00

//想返回 "aaaaaa"
extern "C" _declspec ( dllexport ) void PASCAL GetHardDriveNo(char * a )
{
std::string s_reStr;
s_reStr="0";
char *ch_input=new char[2222];
ch_input ="aaaaaa";
memcpy(a,ch_input,sizeof(ch_input));


//调用
[DllImport("Zc.dll")]
extern "C" void GetHardDriveNo(char* A);


private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

char* szHostName = new char[1024];
GetHardDriveNo(szHostName);//这里是空值 而不是 aaaaaa 为什么?

}
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmis168 2009-01-15
  • 打赏
  • 举报
回复
感谢大家。
hemdacker 2009-01-14
  • 打赏
  • 举报
回复
啥都不说了,调试着看!
qwertxp 2009-01-14
  • 打赏
  • 举报
回复
问题恐怕不仅如此……
即使是指针大小也不是0,结果也不应该是空值。
叶落寒山 2009-01-14
  • 打赏
  • 举报
回复

第一种方法:
改为:
extern "C" _declspec ( dllexport ) void PASCAL GetHardDriveNo(char * a )
{
const char* ch_input = "aaaaa";
memcpy(a, ch_input, 20);

因为楼主一定要函数memcpy的话,需要知道源字符串的长度,才能完成拷贝工作。
而对于字符指针而言,不论是sizeof(ch_input)、sizeof(*ch_input)还是
strlen(ch_input) 都是无法得到该字符指针指向的字符串内容的长度的。
除非你给一个定值。
第二种方法:
改为:
extern "C" _declspec ( dllexport ) void PASCAL GetHardDriveNo(char * a )
{
char ch_input[] = "aaaaa";
memcpy(a, ch_input, sizeof(ch_input));

将字符指针改为字符数组。
第三种方法:
改为:
extern "C" _declspec ( dllexport ) void PASCAL GetHardDriveNo(char * a )
{
char* ch_input = "aaaaa";
strcpy(a,ch_input);

改用函数strcpy。是不用取得字符串的长度的。但是,两个函数是用区别的。memcpy是不管字符串中
有什么都会按照规定好长度进行拷贝,属于内存拷贝。而函数strcpy在拷贝字符串的过程中遇到空字符,
即会停止,不再拷贝后面的内容。
GANJIANLIANG 2009-01-14
  • 打赏
  • 举报
回复
同意1,2楼的说法,不过楼主new完后应该养成判空的好习惯哦,不是每new都成功的
cnzdgs 2009-01-13
  • 打赏
  • 举报
回复
extern "C" _declspec (dllexport) void PASCAL GetHardDriveNo(char* a)
{
strcpy(a, "aaaaaa");
}
ccpaishi 2009-01-13
  • 打赏
  • 举报
回复
memcpy(a,ch_input,sizeof(*ch_input));
oyljerry 2009-01-13
  • 打赏
  • 举报
回复
memcpy(a,ch_input,strlen(ch_input));
fox000002 2009-01-13
  • 打赏
  • 举报
回复
ch_input ="aaaaaa";
memcpy(a,ch_input,sizeof(ch_input));


lz 觉得这里的 sizeof 会得到什么

ch_input 是一个指针

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧