使用从Java用C#编写的DLL
Using DLL's written in C# from Java
这是我第一次使用DLL,我有点不知所措。
不是因为我不懂代码。但是因为我所遵循的所有教程在某些点上都是错误的。
首先我尝试了这个,但是当javah
命令不能工作时,我的工作被缩短了,错误的消息是:Error: Could not find or load main class com.sun.tools.javah.Main
然后我继续制作我自己的ddl,以便我可以从C库调用它们。找到了这个视频,我能够跟随它和它在微软页面上的页面来制作dll。请注意,我完全有能力完成这个示例。我挣扎的一部分是如果我没有头文件或库文件到DLL会发生什么。然后我开始遵循这个例子visual studio说import不存在。
我发现其他人也能做同样的事情。
我做错了什么?最终目标,我想知道如何创建一个像视频中的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";
}
}
我如何通过loadlibrary或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: %sn", full);
else
printf("Invalid pathn");
}
int main(){
HMODULE hMod = LoadLibrary("SimpleDLL.dll");
if (NULL == hMod)
{
cout << "LoadLibrary failedn";
PrintFullPath(".\");
system("PAUSE");
return 1;
}
}
在上面的代码中,我打印出当前工作目录。在那个目录中我放置了我的dll。仍然没有加载dll。
如果有关系,我正在使用Visual studio。我也有兴趣看看我如何通过命令行编译上述c++代码并包含dll !
编辑:我也发现了这一点,但它也依赖于头文件。请注意,我将通过文档了解函数名和格式。我只是没有头文件!
用c#创建的dll与其他dll不同。它们在技术上称为。净程序集。它们依赖于公共语言运行时(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相当简单,或者你不需要将你的代码部署到很多客户端,这可能适合你。
- Java 调用 dll 字符串返回类型方法
- Java:加载带有char **的C DLL,将回调作为参数
- Java加载DLL,该DLL从JNI中的另一个DLL导出方法
- 如何从 JAVA 程序中访问文件中定义的类.DLL方法
- 如何在 Java 中加载、访问和使用C++ DLL 函数?
- 在SWIG和Visual Studio 2015中使用Java中编译的DLL
- JNA从DLL调用C++对象-java.lang.IollegalArgumentException:Structure
- 如何从Java中的C DLL加载和使用结构和功能
- 如何从 Java 调试 CPP DLL
- 在 c++ 程序中使用 Java DLL
- 用C++为java构建一个dll,它正在调用另一个dll(Eclipse上的JNI)
- 线程"main" java.lang.UnsatisfiedLinkError: Native.initiate(I)V 从 Java 运行本机 dll 时
- 无法在 Heroku (Java) 上加载 DLL
- 使用JNI集成java和.net dll
- C/C++(dll)与JAVA(JAR)中的动态链接
- 如何使用 JNI 将结构数组从 C++ dll 返回到 Java Applet
- 我的Java GUI与我的超酷专有dll接口.如何防止第三方与此 dll 接口
- Java 不会从使用 swig 创建的.dll调用函数
- 如何调试 Java 应用程序的 C++ dll
- C++要在 C# 或 Java 中使用的 DLL