c# - 需要用C#写的RPC调用例子

标签 c# c++ wmi rpc

我正在处理 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/

相关文章:

C++:如何覆盖具有相同接口(interface)的特定类的方法

delphi - 如何使用 Win32_NetworkAdapter 或类似工具识别网络 "name"?

c++ - ICU库的拼写规则(RuleBasedNumberFormat)在哪里?

c++ - 我可以将 MPI 与共享内存一起使用吗

wmi - 在 Vista 上通过 WMI 获取 VPN IP 地址

c++ - WMI调用方法

c# - 在读取写入的内容之前,我是否需要 'rewind' 流?

c# - Linq 查询自引用对象以获取无子元素

c# - 在 Xamarin Forms Windows 应用程序中使用 AcquireTokenAsync() 与 Azure AD B2C 和自定义策略时出现连接问题

c# - 为什么我的 List<child> 不能转换成 IList<parent>?