Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中动态使用DLL名称作为导入的一部分#_C#_Dll_Import - Fatal编程技术网

C# 如何在C中动态使用DLL名称作为导入的一部分#

C# 如何在C中动态使用DLL名称作为导入的一部分#,c#,dll,import,C#,Dll,Import,我想在一个静态类中声明不同客户端DLL的导入语句 大多数API都遵循相同的方法签名,对于少数API,在参数方面存在差异。我想通过使用条件编译参数来实现这一点,其中对于公共API,必须使用用户在条件参数中给出的内容来回复DLL名称。只有当用户在条件参数中给出了条件参数时,才必须包含特定于项目的导入语句 这能做到吗 namespace Import { static class ClientImport { public static string DLLNAME;

我想在一个静态类中声明不同客户端DLL的导入语句

大多数API都遵循相同的方法签名,对于少数API,在参数方面存在差异。我想通过使用条件编译参数来实现这一点,其中对于公共API,必须使用用户在条件参数中给出的内容来回复DLL名称。只有当用户在条件参数中给出了条件参数时,才必须包含特定于项目的导入语句

这能做到吗

namespace Import
{
    static class ClientImport
    {
        public static string DLLNAME;

     #if USERAS

        [DllImport("IDEARASClient.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern Int32 InitilizeClient(String ProtocalSequence,String NetworkAddress,String PortNoString,String TempLogPath,ref Int32 hClient);

     #else
         DLLNAME = "IDEARASClient.dll";
      #endif


    [DllImport(DLLNAME, CallingConvention = CallingConvention.StdCall)]
    public static extern Int32 InitilizeClient(String 
    ProtocalSequence,String NetworkAddress,String PortNoString,String 
    TempLogPath,ref Int32 hClient);
  }
}

使用LoadLibrary方法获取DLL的句柄,然后调用GetProcAddress以获取所需的函数地址

然后必须将指针转换为函数委托

此处给出了一个示例: