我有一个第三方C应用程序,它被编译为非.NET非COM DLL。它有一个简单的函数声明如下:
Declare Function CapiTaxRoutine Lib "taxcommono.dll" (ByVal sInData As String, ByVal OutputData As String, ByVal intINPutLength As Long) As Integer
如果我将taxcommono.dll放在我的路径中(C:\ Windows \ System32是我正在使用的,因为它是供应商推荐的那样),我可以连接到该函数的调用,它可以正常工作。它返回1或0表示成功/失败,但它也将OutputData字符串参数的值(使用一些我不熟悉的C指针魔术)设置为具有我需要的数据的巨大固定宽度格式返回记录。当我从.NET .exe应用程序调用它时,它工作得很好。当我尝试通过引用的编译.NET包装器DLL从ASP.NET应用程序调用它时,它运行但无法设置该字符串。为了让它运行,我不能在我的路径中使用taxcommono.dll,而是必须将它放在我的Web项目的Bin目录中。 有没有人知道它可以在从.exe应用程序调用时设置指针但在从Web应用程序调用时不能设置指针? 我正在使用的.NET包装器DLL在从我们的ERP软件调用时工作,该软件不是基于Web的。但是当我在Web应用程序中添加对同一DLL的引用时,它不会给我输出值。我很难过。我之前从未真正使用过C指针并且习惯于获取返回值而不是设置其中一个输入参数的值的函数,这没有任何帮助。我觉得很奇怪。
答案 0 :(得分:0)
所以不确定为什么它不会从引用的DLL中起作用,但是当我在GAC中安装包装器DLL时,它对我有用。这也与我从ERP软件调用时的工作方式相同。 一个巨大的警告是,如果你运行64位窗口,包装器引用的非.NET,非COM DLL是32位,它需要存在于Windows \ SysWOW64,而不是Windows \ System32。非常反直觉。这花费了我比主要问题更多的时间。