如何在 C# 中使用 UrlMon.dll 中的 CreateUri 方法
How to use CreateUri method from UrlMon.dll in C#
我需要在C#中使用UrlMon.dll(...\Windows\System32)的CreateUri方法,但我不能,因为最后一个参数是IUri,它也在UriMon中.dll我不知道如何使用它。
我无法将此 dll 添加为参考或使用 Assembly.GetType() 获取 IUri 类型。
有什么想法吗?
我已经找到了解决方案:
public enum UriProperty
{
ABSOLUTE_URI = 0,
STRING_START = ABSOLUTE_URI,
AUTHORITY = 1,
DISPLAY_URI = 2,
DOMAIN = 3,
EXTENSION = 4,
FRAGMENT = 5,
HOST = 6,
PASSWORD = 7,
PATH = 8,
PATH_AND_QUERY = 9,
QUERY = 10,
RAW_URI = 11,
SCHEME_NAME = 12,
USER_INFO = 13,
USER_NAME = 14,
STRING_LAST = USER_NAME,
HOST_TYPE = 15,
DWORD_START = HOST_TYPE,
PORT = 16,
SCHEME = 17,
ZONE = 18,
DWORD_LAST = ZONE
}
[ComImport]
[Guid("A39EE748-6A27-4817-A6F2-13914BEF5890"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IUri
{
UInt32 GetPropertyBSTR([In]UriProperty uriProp, [Out]out string strProperty, [In]UInt32 dwFlags);
UInt32 GetPropertyLength([In]UriProperty uriProp, [Out] out UInt32 pcPropLen, [In]UInt32 dwFlags);
UInt32 GetPropertyDWORD([In]UriProperty uriProp, [Out] out UInt32 pcPropValue, [In]UInt32 dwFlags);
UInt32 HasProperty([In]UriProperty uriProp, [Out] out bool fHasProperty);
UInt32 GetAbsoluteUri([MarshalAs(UnmanagedType.BStr)][Out] out string sAbsoluteUri);
UInt32 GetAuthority([MarshalAs(UnmanagedType.BStr)][Out] out string sAuthority);
UInt32 GetDisplayUri([MarshalAs(UnmanagedType.BStr)][Out] out string sDisplayString);
UInt32 GetDomain([MarshalAs(UnmanagedType.BStr)][Out] out string sDomain);
UInt32 GetExtension([MarshalAs(UnmanagedType.BStr)][Out] out string sExtension);
UInt32 GetFragment([MarshalAs(UnmanagedType.BStr)][Out] out string sFragment);
UInt32 GetHost([MarshalAs(UnmanagedType.BStr)][Out] out string sHost);
UInt32 GetPassword([MarshalAs(UnmanagedType.BStr)][Out] out string sPassword);
UInt32 GetPath([MarshalAs(UnmanagedType.BStr)][Out] out string sPath);
UInt32 GetPathAndQuery([MarshalAs(UnmanagedType.BStr)][Out] out string sPathAndQuery);
UInt32 GetQuery([MarshalAs(UnmanagedType.BStr)][Out] out string sQuery);
UInt32 GetRawUri([MarshalAs(UnmanagedType.BStr)][Out] out string sRawUri);
UInt32 GetSchemeName([MarshalAs(UnmanagedType.BStr)][Out] out string sSchemeName);
UInt32 GetUserInfo([MarshalAs(UnmanagedType.BStr)][Out] out string sUserInfo);
UInt32 GetUserName([MarshalAs(UnmanagedType.BStr)][Out] out string sUserName);
UInt32 GetHostType([Out] uint dwHostType);
UInt32 GetPort([Out] uint dwPort);
UInt32 GetScheme([Out] uint dwScheme);
UInt32 GetZone([Out] uint dwZone);
UInt32 GetProperties([Out] uint dwFlags);
UInt32 IsEqual([In]IUri pUri,[Out] bool fEqual);
}
这为我们提供了 IUri 接口,现在我们可以使用 CreateUri 方法:
[DllImport("UrlMon.dll", SetLastError = true)]
public static extern bool CreateUri(string uri, uint flag, IntPtr dwReserved, out IUri a);
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 如何在 C# 中使用 UrlMon.dll 中的 CreateUri 方法