VB6 中带有命名空间的外部 DLL
External DLL in VB6 with namespaces
我目前在使用 VB6 应用程序时遇到一些问题,该应用程序需要使用 .NET Framework 4.5 中提供的相同编码方法对一些文本进行编码。
我在互联网上搜索并发现了一些尝试基于 UTF-8 进行编码的函数,但它仍然与 4.5 输出不匹配。
然后就想办法在VB6工程中导入4.5框架DLL。这是我到目前为止所取得的成就:
Private Declare Function dotNetUrlEncode Lib "System.Web.dll" Alias "UrlEncode" (str As String) As String
问题是方法 "UrlEncode" 在命名空间 "HttpUtility"、"System.Web.HttpUtility.UrlEncode" 中,使用上面的代码我无法访问该方法。我已尝试将其更改为看起来像下面的代码,但问题仍然存在,我无法访问 UrlEncode:
方法
Private Declare Function dotNetUrlEncode Lib "System.Web.dll" Alias "HttpUtility.UrlEncode" (str As String) As String
Private Declare Function dotNetUrlEncode Lib "System.Web.HttpUtility.dll" Alias "UrlEncode" (str As String) As String
有没有办法到达 "System.Web.dll" 中的 UrlEncode 方法?我哪里错了?
感谢您的帮助!
此致。
这行不通。 .NET DLL 包含 managed 代码,这需要 .NET 运行时。您的 VB6 应用无法调用该代码。它的进程没有加载 .NET 运行时。
您只能通过这种方式从 本机 DLL 导入函数。这就是它适用于操作系统附带的系统 DLL 的原因。
最好的解决方案确实是查阅文档并准确确定 UrlEncode
函数的工作原理。当然,不会记录实现的内部结构,但这并不重要。您感兴趣的只是规范。如果找不到具有等效行为的系统函数,请在实现自己的函数时遵循相同的规范。
如果您确实需要从 VB6 应用程序调用 .NET 函数,也可以做到。您将需要创建一个 .NET 包装器,它调用框架提供的函数并使用 ComVisibleAttribute
以 COM 兼容的方式公开。更多信息 here, here, and here.
我目前在使用 VB6 应用程序时遇到一些问题,该应用程序需要使用 .NET Framework 4.5 中提供的相同编码方法对一些文本进行编码。 我在互联网上搜索并发现了一些尝试基于 UTF-8 进行编码的函数,但它仍然与 4.5 输出不匹配。
然后就想办法在VB6工程中导入4.5框架DLL。这是我到目前为止所取得的成就:
Private Declare Function dotNetUrlEncode Lib "System.Web.dll" Alias "UrlEncode" (str As String) As String
问题是方法 "UrlEncode" 在命名空间 "HttpUtility"、"System.Web.HttpUtility.UrlEncode" 中,使用上面的代码我无法访问该方法。我已尝试将其更改为看起来像下面的代码,但问题仍然存在,我无法访问 UrlEncode:
方法Private Declare Function dotNetUrlEncode Lib "System.Web.dll" Alias "HttpUtility.UrlEncode" (str As String) As String
Private Declare Function dotNetUrlEncode Lib "System.Web.HttpUtility.dll" Alias "UrlEncode" (str As String) As String
有没有办法到达 "System.Web.dll" 中的 UrlEncode 方法?我哪里错了?
感谢您的帮助!
此致。
这行不通。 .NET DLL 包含 managed 代码,这需要 .NET 运行时。您的 VB6 应用无法调用该代码。它的进程没有加载 .NET 运行时。
您只能通过这种方式从 本机 DLL 导入函数。这就是它适用于操作系统附带的系统 DLL 的原因。
最好的解决方案确实是查阅文档并准确确定 UrlEncode
函数的工作原理。当然,不会记录实现的内部结构,但这并不重要。您感兴趣的只是规范。如果找不到具有等效行为的系统函数,请在实现自己的函数时遵循相同的规范。
如果您确实需要从 VB6 应用程序调用 .NET 函数,也可以做到。您将需要创建一个 .NET 包装器,它调用框架提供的函数并使用 ComVisibleAttribute
以 COM 兼容的方式公开。更多信息 here, here, and here.