【问题标题】:Create a subroutine in a VB.Net exe that is callable from another program在 VB.Net exe 中创建一个可从另一个程序调用的子例程
【发布时间】:2013-02-09 11:07:10
【问题描述】:

是否可以在 VB.Net exe 中创建一个可从另一个程序(不是 VB.Net)调用的子例程?我知道您可以使用程序集(dll)来执行此操作,但您也可以在 exe 中执行此操作吗?

[编辑]这个 VB.Net exe 在调用时已经在运行。

[Edit2] VB.Net程序,编译成BA_SyncNet.exe - Form1.vb

Public Class Form1
    ...
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ...
    End Sub
End Class

VB.Net 程序 - Helloworld.vb

Namespace MapInfoBA.MiProBA.SamplesBA
    Public Class HelloWorld

        Public Shared Sub SayHello(ByVal s As String)
            System.Windows.Forms.MessageBox.Show("Hello, " + s)
        End Sub

    End Class
End Namespace

调用程序 ba.mbx 使用:

Declare Method SayHello Class "MapInfoBA.MiProBA.SamplesBA.HelloWorld"  Lib "BA_SyncNet.exe" (ByVal strName As String)

Sub Main()
    Call SayHello("World")
End Sub

亲切的问候

【问题讨论】:

  • 我相信 .net exe 必须设置为接受命令行参数。
  • 嗨@Jack,也忘了提到这个 VB.Net exe 已经在运行了。

标签: vb.net


【解决方案1】:

我知道您可以通过程序集来做到这一点

.exe 是一种程序集。所以,是的。

【讨论】:

  • 对不起@Joel Coehoom,当我说汇编时,我的意思是 dll。这有什么不同吗?
  • @Hank 它不会改变任何东西。 dll也是一种程序集。基本上,您可以通过 COM 或其他方式对 dll 执行任何操作,因为它是一个程序集。 .Net exe 文件恰好也是一个程序集,只是带有一些特殊版本,以便运行时知道双击它时要做什么。
  • Coehoom,谢谢!是否像在我的应用程序中创建一个新类一样简单,如果您查看我的第二次编辑,我只是​​尝试了这个,但没有运气。有什么建议吗?
  • 如果两个程序都是 .Net,则在 Visual Studio 中从调用者添加引用并导入命名空间,不需要 Declare 指令。
  • Coehoom,调用者是用MapBasic写的,和vb6很像。 “声明方法”用于调用 .Net 程序集。然而,上面我得到了错误:找不到类“MapInfoBA.MiProBA.SamplesBA.HelloWorld”。我需要做些什么来使这个类或命名空间对 COM 友好吗?
【解决方案2】:

使用 MapBasic 程序创建一个文件(比如 DoThisVBNet.txt)。

然后您的 vb.net 程序会不时检查该文件。 vb.net 程序将根据 DoThisVBNet.txt 文件执行一项任务(在您的情况下,调用一个子例程)。

然而, 由于两个程序正在使用它,访问该文件时可能会出现问题, 要解决此问题,请使用注册表而不是文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多