使用从Java用C#编写的DLL

薄饼

这是我第一次使用DLL,我有点茫然。

不是因为我不懂代码。但是因为我跟随的所有教程都在某些时候中断了。

首先,我尝试这样做,但是当javah命令无法正常工作并出现以下错误消息时,我的工作被缩短了:Error: Could not find or load main class com.sun.tools.javah.Main

然后,我继续制作自己的ddl,以便可以从C调用它们为库。找到了该视频,我就可以按照它及其在Microsoft页面上的页面创建dll。请注意,我完全有能力遵循该示例。我苦苦挣扎的一部分是,如果我没有DLL的头文件或lib文件,将会发生什么。因此,然后我开始按照此示例进行操作,视觉工作室说导入不存在。

我发现其他人也可以得到同样的效果。

我究竟做错了什么?最终目标,我想知道如何像视频中那样创建DLL文件。并且只有在我拥有DLL文件的情况下,才能访问其功能。

因此,如果DLL是使用以下创建的:

标头

namespace nmspace
{
    class myclass{
    public:
        static __declspec(dllexport) void Crap();
    };
}

Source.cpp

#include "Header.h"
using namespace std;
#include <iostream>
namespace nmspace
{
    void myclass::Crap(){
        cout << "Some Crap";
    }
}

如何通过LoadLibarary或LoadLibararyA调用它。请注意,对我不起作用

读取dll:

#include <Windows.h>
#include <iostream>

using namespace std;



void PrintFullPath(char * partialPath)
{
    char full[_MAX_PATH];
    if (_fullpath(full, partialPath, _MAX_PATH) != NULL)
        printf("Full path is: %s\n", full);
    else
        printf("Invalid path\n");
}


int main(){
    HMODULE hMod = LoadLibrary("SimpleDLL.dll");
    if (NULL == hMod)
    {
        cout << "LoadLibrary failed\n";
        PrintFullPath(".\\");

        system("PAUSE");
        return 1;
    }

}

在上面的代码中,我打印出当前的工作目录。在该目录中,我放置了dll。仍然没有加载dll。

如果这样的话,我正在使用Visual Studios。我也很高兴看到我将如何通过命令行编译上面的c ++代码并包含dll!

编辑:

我也发现了这一点,但它也依赖于头文件。请注意,我将通过文档了解函数名称和格式。我只是没有头文件!

汤姆

用C#创建的DLL与其他DLL不同。它们在技术上称为.NET程序集它们依赖于公共语言运行时(CLR),就像Java字节码依赖Java虚拟机一样。您发布链接的视频不是创建.NET程序集,而是创建本机Windows DLL。

显然,如果您在一个进程中加载​​了两个虚拟机,那么事情将会变得复杂。他们都对如何使用内存,垃圾回收,对象在内存中的布局,线程化等有自己的想法。

这并不是说您想做的事情是不可能的,但是它比用加载本机库要复杂得多LoadLibrary

您可能想看看以下项目来帮助您:

  • SWiG- www.swig.org-免费,但我不确定将Java与C#接口将涉及多少额外工作
  • JNbridge- www.jnbridge.com-不是免费的,但声称可以简化您的工作
  • Javonet- www.javonet.com-不是免费的,但是声称可以简化您的工作
  • IKVM- www.ikvm.net-这个字段有点左字段。它使您可以在.NET运行时上运行Java字节码,这意味着您可以直接调用.NET / C#代码。如果您的Java非常简单和/或不必将代码部署到许多客户端,那么这可能对您有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用乘法C#编写循环

来自分类Dev

用C#编写完程序后如何创建程序

来自分类Dev

用Java编写的烧瓶

来自分类Dev

用C#编写不可变结构的最短方法

来自分类Dev

用Java编写的Razor

来自分类Dev

用C编写DTrace使用者

来自分类Dev

用C#编写WebSocket服务器

来自分类Dev

如何从C#使用C ++ dll

来自分类Dev

用多行C#代码编写SQL查询

来自分类Dev

包装程序作为EXE而不是DLL(使用C ++ / CLI编写,环绕C#类)工作

来自分类Dev

无法使用IronPython导入用c#编写的模块

来自分类Dev

使用WriteConsoleOutput用c#编写Unicode

来自分类Dev

用C#编写Tor时遇到麻烦

来自分类Dev

如何将参数传递给用C#编写的托管代码dll的自定义操作?

来自分类Dev

如何托管一个用Java / C#/ Python编写的小型RESTful应用程序?

来自分类Dev

Unity3d插件是用C#编写的,我想使用UnityScript与之交互

来自分类Dev

在C#中使用的C ++ COM DLL

来自分类Dev

使用从Java用C#编写的DLL

来自分类Dev

在C#中使用C ++ dll对象

来自分类Dev

用C#编写文字

来自分类Dev

使用联合从C#调用C ++ DLL

来自分类Dev

用C#编写xml可变的atrrtibutes

来自分类Dev

用C#编写编译器,生成C与IL?

来自分类Dev

在C#Windows-Forms-Application中使用FoxPro编写的DLL

来自分类Dev

使用特殊字符用C#编写XML文档

来自分类Dev

尝试使用 gcc 编译用 C 编写的简单 dll 失败

来自分类Dev

QuickBooks 报告使用 QBXML 用 C# 编写的 Excel 插件的无效证书

来自分类Dev

需要在 Java 中引用和使用 C# dll

来自分类Dev

用 C# 编写 Neo4J Cypher 查询