使用未定义类的C#Interop库调用函数

问题描述

我有一个VB6应用程序,我需要能够将引用从一个dll切换到另一个(我正在编写)

它必须能够在不添加类的情况下调用someFunction()

例如

在vb6中:

Dim test As SomeObject
Set SomeObject = someFunction("test")

这两个dll需要在代码方面可以互换。我们只希望一个引用在结果程序中进行更改以做两种不同的事情

似乎C#不允许对静态函数进行互操作(由于COM限制)。尽管我仍然需要满足vb6要求的功能

解决方法

如果您有权访问代码,为什么不添加新模块并添加该功能。在函数主体中,照常调用COM对象。这样,您不必在代码中更改对函数调用的所有引用,我想避免这种情况。

,

我找到了答案;我只是暂时没有在正确的位置看。

UnmanagedExports (Repacked)

一个非常有用的nuget程序包,可以导出属性为“ DllExport”的函数

例如:

在C#中

[DllExport]
public static void HelloWorld() { return "Hi!" }

可以像这样从VB6应用程序中调用

Private Declare Function HelloWorld Lib "MyCSharpDll.dll" () As String

然后稍后在代码中简单地调用它(这是如果您想输出像MsgBox一样的话)

MsgBox HelloWorld() 

哪个会简单地返回“嗨!”在消息框中

那不是很酷吗?

您可以使用开发者控制台中的此命令查看.dll中的导出内容

dumpbin /EXPORTS MyCSharpDll.dll

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...