在Microsoft IDL中提供界面
[
uuid(04802821-F237-486D-BC90-B6BB048DC8B2),
version(1.0)
]
interface RPC
{
void foo([in, string] char * string)
}
生成的存根和头文件是rpc_c.c,rpc_s.c和rpc_h.h。在头文件中,rpc_h.h声明了函数foo
void foo( char * string );
在rpc_c.c中自动定义客户端版本
void foo( char * string)
{
NdrClientCall(...);
}
但是现在我想在同一个程序中实现客户端和服务器以进行测试,这应该出现
#include "rpc_h.h"
#include "rpc_c.c"
#include "rpc_s.c"
/*server foo*/
void foo(char * string)
{
printf("%s\n", string);
}
/*server*/
void server()
{
//RpcServerRegisterIfEx(...);
//RpcServerUseProtseqEp(...);
//RpcServerListen(...);
}
int main(int args, char * argv[])
{
/*server runs*/
CreateThread(NULL, 0, server, argv[1], 0, NULL);
/*make RPC as client*/
foo(argv[2]);
}
正如您所看到的,关于客户端和服务器foo的重新定义肯定存在错误。所以我不能手动将rpc_c.c中的客户端foo重命名为
void foo_client( char * string)
{
NdrClientCall(...);
}
并在rpc_h.h中将其与服务器版本一起声明
void foo_client( char * string );
void foo( char * string );
因此,当我在主服务器中将RPC作为客户端时,我会这样做
foo_client(argv[2]);
它起作用但看起来有点hacky。有没有一个像样的解决方案呢?
PS:对于那些可能关心的人,我使用纯系统RPC开发。它不是关于COM,COM +,DCOM甚至是面向对象的。我正在开发基于DHT的点对点应用程序,所以我必须在同一个应用程序中实现客户端和服务器。抱歉com和dcom代码已被删除
答案 0 :(得分:0)
不要在同一个应用程序中创建客户端和服务器。
在同一台计算机上创建虚拟客户端应用程序。你的生活很艰难。