为什么在不能够把一般类型的指针的内容传递到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);
为什么不能够把数组的内容传过去呢?
...全文
14 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
ATL
创建于2007-09-28

3216

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
申请成为版主
帖子事件
创建了帖子
2003-03-14 03:21
社区公告
暂无公告