gpt4 book ai didi

java - 从 Java 使用 C# 编写的 DLL

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:16 25 4
gpt4 key购买 nike

这是我第一次使用 DLL,我有点不知所措。

不是因为我不懂代码。但是因为我遵循的所有教程,而且它们在某些时候会中断。

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

然后我继续制作自己的 ddl,以便我可以从 C 库中调用它们。找到this video我能够在 Microsoft 页面上关注它和它的页面来制作 dll。请注意,我完全有能力按照示例进行操作。我遇到的一个问题是,如果我没有 DLL 的头文件或 lib 文件,会发生什么情况。于是我开始关注 this example Visual Studio 说导入我不存在。

我发现 others能够得到完全相同的东西。

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

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

标题

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

源.cpp

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

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

读取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 包含在其中!

编辑:

我还找到了this但它也依赖于头文件。注意,我会通过文档知道函数名称和格式是什么。我只是没有头文件!

最佳答案

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

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

这并不是说您尝试做的事情是不可能的,但它比使用 LoadLibrary 加载 native 库要复杂得多。

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

  • SWiG - www.swig.org - 免费,但我不确定将 Java 连接到 C# 会涉及多少额外工作
  • JNbridge - www.jnbridge.com - 不是免费的,但声称可以使您尝试做的事情变得简单
  • Javonet - www.javonet.com - 不是免费的,但声称可以使您尝试做的事情变得简单
  • IKVM - www.ikvm.net - 这个有点偏左。它允许您在 .NET 运行时上运行 Java 字节码,这意味着您可以直接调用 .NET/C# 代码。如果您的 Java 相当简单和/或您不必将代码部署到许多客户端,这可能适合您。

关于java - 从 Java 使用 C# 编写的 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25356928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com