我正在处理 WMI 连接错误和超时,将首先尝试检查 RPC 堆栈。我找到了以下 C 代码片段,但不了解它是否工作以及如何工作以及我在哪里可以找到更多信息甚至示例。
RPC_STATUS status; unsigned short *StringBinding; RPC_BINDING_HANDLE BindingHandle; status = RpcStringBindingCompose ( NULL, // Object UUID L"ncacn_ip_tcp", // Protocol sequence to use L"MyServer.MyCompany.com", // Server DNS or Netbios Name NULL, NULL, &StringBinding ); // Error checking ommitted. If no error, we proceed below status = RpcBindingFromStringBinding(StringBinding, &BindingHandle); // free string regardless of errors from RpcBindingFromStringBinding RpcStringFree(&StringBinding);
这段代码真的有联系吗? 有人有 C# 的互操作声明吗?
到目前为止谢谢。
br--马布拉
最佳答案
这是上面示例的互操作代码:
class Rpc
{
[DllImport("Rpcrt4.dll", CharSet = CharSet.Auto)]
public static extern int RpcStringBindingCompose(
string ObjUuid,
string ProtSeq,
string NetworkAddr,
string EndPoint,
string Options,
out string StringBinding);
[DllImport("Rpcrt4.dll", CharSet = CharSet.Auto)]
public static extern int RpcBindingFromStringBinding(
string StringBinding,
out IntPtr Binding);
[DllImport("Rpcrt4.dll", CharSet = CharSet.Auto)]
public static extern int RpcBindingFree(
ref IntPtr Binding);
public Rpc()
{
string stringBinding = null;
int retCode = RpcStringBindingCompose(
null, // Object UUID
"ncacn_ip_tcp", // Protocol sequence to use
"MyServer.MyCompany.com", // Server DNS or Netbios Name
null,
null,
out stringBinding );
IntPtr bindingHandle = IntPtr.Zero;
retCode = RpcBindingFromStringBinding(stringBinding, out bindingHandle);
retCode = RpcBindingFree(ref bindingHandle);
}
}
关于c# - 需要用C#写的RPC调用例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931279/