为什么在不能够把一般类型的指针的内容传递到dcom服务器中!

romijn 2003-03-14 03:21:41
服务器的IDL
[id(20), helpstring("method PassLongs1")] HRESULT PassLongs1([in] ULONG ulNum,[in] LONG * pArr);

这是Dcom服务器端的函数!
STDMETHODIMP CComInter::PassLongs1(ULONG ulNum, LONG *pArr)
{
long iTime=GetTickCount();
SYSTEMTIME systime;
GetLocalTime(&systime);


FILE *fout;
BOOL b=FALSE;
if( (fout = fopen( "E:\\Ghy_Share\\writelong1.txt", "a+t" )) != NULL ){
fprintf(fout,"\n /**************************************************");
fprintf(fout,"\n DateTime: %4i/%2i/%2i %2i:%2i:%2i",
systime.wYear,systime.wMonth,systime.wDay,systime.wHour,
systime.wMinute,systime.wSecond);
fprintf(fout,"\n 下面是上传过来的数据!");

for (ULONG x = 0; x < ulNum; x++)
{
fprintf(fout,"\n %li",pArr[x]);
}

fclose(fout);
}


return S_OK;
}
客户端如下:
ULONG ulNum = 10;
LONG l[10];
for (ULONG x = 0; x < ulNum; x++)
l[x] = x+1;
IComInter1->PassLongs1(ulNum,l);
为什么不能够把数组的内容传过去呢?
...全文
48 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CowWu 2003-03-18
  • 打赏
  • 举报
回复
这当然不行,进行列集时把LONG *pArr当成一个指向long的指针,然后根据该指针获取long的值传递过去;而不是把LONG *pArr当成一个long型数组进行列集。有空看看com列集和散集的相关知识!
romijn 2003-03-18
  • 打赏
  • 举报
回复
用开发环境,到项目的目录下,运行 (xxx是你工程的名字)
nmake /f xxxps.mk
regsvr32 xxxps.dll
就可以了。
如果是远程调用,需要在两台电脑上注册proxy/stub的动态连接库。
cboy2wzhx 2003-03-17
  • 打赏
  • 举报
回复
我遇到了同样的问题,关注。。。
romijn 2003-03-17
  • 打赏
  • 举报
回复
up
handsomebaby 2003-03-17
  • 打赏
  • 举报
回复
[id(20), helpstring("method PassLongs1")] HRESULT PassLongs1([in] ULONG ulNum,[in] LONG ArraySize,[in,size_is(ArraySize)] LONG pArr[]);

客户端如下:
ULONG ulNum = 10;
LONG l[10];
for (ULONG x = 0; x < ulNum; x++)
l[x] = x+1;
IComInter1->PassLongs1(ulNum,10L,l);
arxing 2003-03-17
  • 打赏
  • 举报
回复
当然不行,一般类型指针只是当前进程的一个地址,交给别的进程是没有意义的。
wj59 2003-03-14
  • 打赏
  • 举报
回复
up

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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