【问题标题】:How to utilise C# methods in a different programming language如何在不同的编程语言中使用 C# 方法
【发布时间】:2013-09-19 08:25:38
【问题描述】:

我正在尝试连接到只有 C# API 的商业服务器应用程序。

我想这样做的最佳方法是创建一个 C# DLL - 这就是我所做的。但是,在使用 3rd 方工具检查 DLL 中包含的方法时,这些方法似乎不可见。

我在 StackOverflow 上进行了广泛搜索,发现 the following suggestion 适用于大多数人 - 但是在使用此扩展程序时这些方法仍然不可见。

因此,可能是时候寻找一种替代方法来解决这个问题了 - 一种选择可能是 C# 控制台应用程序。

关于最佳方法的任何想法?

编辑:

运行 DUMPBIN 程序后,输出如下:

C:\Program Files (x86)\Microsoft Visual Studio 11.0>dumpbin /EXPORTS "C:\Users\mark\Desktop\Test.dll"

Dump of file C:\Users\mark\Desktop\Test.dll

File Type: DLL

  Summary

        2000 .reloc
        2000 .rsrc
        2000 .text

【问题讨论】:

  • 您能否提供一个您尝试构建到 C# Dll 中的方法/类的示例?
  • 我尝试了上面链接中显示的示例,但也没有用。在 DependencyWalker 中打开 DLL 时,这些类不可见。
  • 垃圾箱说什么?
  • @doctorlove - 使用 DUMPBIN 输出编辑问题
  • 也许您可以使用COM 将您的C# 库的功能集成到Basic+ 应用程序中?

标签: c# .net dll client-server unmanaged


【解决方案1】:

如果 Basic+ 可以选择调用 C 代码,您可以选择在托管 C++ 中创建项目:

导出一些装饰如下的函数:

    extern "C"{
    __declspec(dllexport) void _cdecl MyFunction()
     {
          _MyImpl(); //see below wy this
      }
    }

void MyImpl()
{
    MyCSharpObj^ test = gcnew MyCSharpObj()...
    test->Methods(...
}

在用 extern C 装饰的部分之外,您可以安全地调用和混合托管和非托管调用。您应该跳出 extern C 块的原因是几乎所有托管函数都有重载,并且 Extern C 即使在调用中也不支持方法重载。 您可以通过向您的 .NET 库添加引用(实际上您可以使用托管 C++ 编写所有代码,但不是那么友好)来调用 c#。

【讨论】:

  • 谢谢,我试试看!
【解决方案2】:

Basic+好像是Revelation Software制作的。

this page 上,它说:

OpenInsight 9.1 发布

这个新的 OpenInsight 版本包括一个 几个 .NET 创新。 NetOI 使开发人员能够使用 他们的 Microsoft Visual Studio 许可证和针对 OpenInsight 的工作 数据库。 RevDotNet 功能提供了一种调用方法 .NET API 并在 OpenInsight 中使用 .NET 控件 应用。

您可以使用 RevDotNet 直接调用您的 C# API 吗?

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多