我有另一个程序(我没有源代码,已经编译过)调用DLL。我想把DLL交换出去,把它自己放在它的位置,运行我自己的模型(在DLL中),而不是软件附带的另一个。
我使用G95编译器在fortran中制作了DLL,这些编译器可以像下面一样动态地声明它们。我也研究过使用VB .NET创建DLL,但似乎唯一的选择是类库,它不会被调用并以与下面相同的方式声明。我确实有开发人员的函数声明代码,但这就是全部(见下文)
有没有办法使用VB NET创建不涉及类库的工作DLL,我可以将dll文件命名为“318dll.dll”,并且在里面有一个名为CalcLoss的函数,就是这样,而不是类,仅一个功能。我知道如何使用VB NET创建DLL的唯一方法是使用类库,然后你必须包含现有的项目,它在你的项目中神奇地出现。
以下是已经工作的fortran DLL的模板调用代码。如何使用VB NET制作这种DLL?
感谢。
Declare Sub CalcLoss Lib "318dll.dll" (TanTHT As Single, RanTHT As Single, EXTNSN As Boolean, ByVal Mode As String, Loss As Single, FSPLSS As Single)
答案 0 :(得分:2)
我认为你想要创建一个Win32 DLL库,而不是.NET库。这就是为什么你没有看到你想要的选项。我不确定在VB.NET中是否有办法做到这一点。您可能需要切换到常规Visual Basic(而不是.NET)才能执行此操作。
答案 1 :(得分:0)
选项1:使用C ++ / ME在VB.NET DLL周围创建一个非托管包装器。
选项2:升级到FORTRAN的.NET版本。
答案 2 :(得分:0)
如果您想在.Net(VB.Net/C#)中编写代码并将其公开给非托管应用程序,您可以尝试我编写的这个工具。它允许您使用Attributes标记方法,然后重新组装程序集以允许导出。
此代码没有支持,但可以免费使用。 自行承担风险
......扩展......
在导出方法上使用ExportAttribute编译程序集后,可以运行重新编译器来反汇编和重新组合应用程序。这只是作为概念证明而写的。但它在VB6 / Winbatch和.Net程序集之间起作用。它还使用.Net DllImport / PInvoke函数进行了测试。
答案 3 :(得分:0)
Johnathan allen的选项#1是最好的。您可以使用来自c ++,VB6.0等的.NET库,MS上有文档。只需使用你的库。
但是,如果由于某种原因无法正常工作(警告, HACK ),如果你只用1x / sec或更短的时间调用它:
C ++ Win32 dll:将parm值写入临时文件。启动编译成EXE的VB.NET代码,该EXE读取临时文件并写入另一个结果。 Win32 DLL等待VB EXE,然后读取文件(真的用进程lib等待它,不要只查找输出文件,这是一个等待发生的痛苦世界)
答案 4 :(得分:0)
所以解决方案原来只是在fortran中编写DLL,因为我可以复制并粘贴一堆已经infortran的代码,而不是让VB dll调用fortran dll。现在它的所有一个dll,它的工作原理。感谢大家的投入。