Visual studio VB6中带有名称空间的外部DLL
我目前在使用VB6应用程序时遇到一些问题,该应用程序需要使用.NET framework 4.5中提供的相同编码方法对一些文本进行编码。 我在互联网上搜索了一下,找到了一些尝试使用UTF-8编码的函数,但它仍然与4.5输出不匹配 然后,我寻找一种在VB6项目中导入4.5框架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
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模块导出非托管函数的方式相同。