我发现我最近遇到的几个没有人回答的出的问题,其实要解决的只是一个极其简单的问题, 但是却没有人解决的了, 问题是 如何 void * 和VARIANT 相互转换

  • 主题发起人 主题发起人 葬月
  • 开始时间 开始时间

葬月

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现我最近遇到的几个没有人回答的出的问题,其实要解决的只是一个极其简单的问题, 但是却没有人解决的了, 问题是 如何 void * 和VARIANT 相互转换(C++Builder)(100分)<br />这是我的代码
TMemoryStream *m=new TMemoryStream();
m->LoadFromFile("D://ime.exe");
m->Seek(0,0);
void *ch=(void*)new char[m->Size+1];
m->Read(ch,m-Size+1);
TVariant v=ch;
TMemoryStream *f=new TMemoryStream();
f->Write(v.pcVal,m->Size+1);
f->SaveToFile("E://sd.exe");
delete ch;
delete m;
delete f;
我想通过void*和TVariant 的转换
然后再将TVariant和VARIANT转换
但是即便只是和TVariant生成的exe文件好象就不能运行
我哪里错了
 
你可真是执着!如果你耐得住性子的话,本周日以前,我争取给你个答复。(这两天在搞
投标,实在没空)
 
那当然,,,,我的整个项目就因为这个问题而停滞不前
 
TMemoryStream *m=new TMemoryStream();
m->LoadFromFile("D://ime.exe");
m->Seek(0,0);
TMemoryStream *f=new TMemoryStream();
f->CopyFrom(m, 0);
f->Seek(0,0);
f->SaveToFile("E://sd.exe");
delete m;
delete f;
 
接受答案了.
 
我实现了一个用无类型指针做接口参数的Automation组件,你可能看不上,但这种办法实在
是很简单,只是不知能不能被VB调用。在本机上已经传输成功(传的是一个JPEG图片),
但还没有试过用DCOM来远程调用该组件,我过后再试试用DCOM,现在还没有配置好DCOM,
不知该怎么调用DCOM,如果不通过DCOM来调用的话,这样的组件应该是没有意义的了。
//服务器端代码:
STDMETHODIMP TFileTransImpl::Upload(BSTR FileName, void* Data, long FSize,
int* Result)
//参数是多了点,但这样做自己对程序的控制很清楚,而且为了分布式考虑,客户端在
//调用此方法时也应该传入文件大小
{
int n;
FILE *fp;
char Buf[255];
*Result = 0;
if ((fp=fopen("C://temp//FileTrans.dat", "wb+"))==NULL){
*Result = -2;
return S_OK;
}
n = fwrite(Data, FSize, 1, fp);
if (n<=0)
*Result = -1;
fclose(fp);
return S_OK;
}
//客户端代码
void __fastcall TForm1::Button1Click(TObject *Sender)
//可以将此过程再次封装为一个函数,例如:int SendFile(AnsiString FileName);
{
TCOMIFileTrans Obj;
WideString S;
TFileStream *fs;
char *Buf;
int rs=0;
if (OpenDialog1->Execute()){
S = OpenDialog1->FileName;
fs = new TFileStream(S, fmOpenRead);
Buf = new char[fs->Size];
fs->ReadBuffer(Buf, fs->Size);
Obj = CoFileTrans::Create();
//用一个字符数组来做收发数据的缓存,用字符数组没有什么不妥,除了不能用
//sizeof()或strlen()来获取数据长度以外。
Obj->Upload(S, Buf, fs->Size, &amp;rs);
delete fs;
delete[] Buf;
if (rs<0)
ShowMessage("发送失败!错误:"+IntToStr(rs));
else
ShowMessage("发送成功!");
}
}
 
后退
顶部