Visual studio VB6中带有名称空间的外部DLL

Visual studio VB6中带有名称空间的外部DLL,visual-studio,vb6,dllimport,Visual Studio,Vb6,Dllimport,我目前在使用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 St

我目前在使用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包含托管代码,这需要.NET运行时。你的VB6应用程序无法调用该代码。其进程未加载.NET运行时

您只能通过这种方式从本机DLL导入函数。这就是为什么它适用于操作系统附带的系统DLL

最好的解决方案是查阅文档并准确确定
UrlEncode
函数的工作方式。当然,实现的内部内容不会被记录下来,但这并不重要。您感兴趣的只是规格。如果找不到具有等效行为的系统函数,那么在实现自己的函数时,请遵循相同的规范


如果您确实需要从VB6应用程序调用.NET函数,则可以这样做。您需要创建一个.NET包装器,该包装器调用框架提供的函数,并使用
ComVisibleAttribute
以COM兼容的方式公开。更多信息,以及。

您可能需要查看COM可调用包装器。谢谢,我来看看!引入.net是一种疯狂的做法。你真的应该找到一个没有.net的解决方案。不要轻易放弃!这不是一个仅限于ASP.Net的命名空间吗?MSDN:“要在web应用程序之外对值进行编码或解码,请使用WebUtility类。”首先,感谢您的关注!我会看一下文档,但我还有一个问题:如果我使用.NET创建一个新的dll,并在这个dll中创建一个新方法,只返回UrlEncode的4.5框架输出?我可以使用上面提到的方法吗?假设您采取了使.NET程序集在COM应用程序(VB6)中可见所需的步骤。不正确。例如,您可以使用Robert Giesecke的UnmanagedExports。也可以将其包装在C++/CLI混合模式程序集中。前者是迄今为止最简单的。然而,将.net引入这一过程简直是一个疯狂的想法@有趣的是,我从未听说过非托管出口。我很好奇它是怎么工作的。知道我在哪里能找到吗?该网页在细节上非常稀疏,而且似乎不是开源的。我假设它修改了IL,但是它做了什么修改来克服.NET程序集需要.NET运行时的问题呢?.NET运行时仍然被加载。对IL进行了修改。与混合模式C++/CLI模块导出非托管函数的方式相同。