这是我第一次使用DLL并且我有点不知所措。
不是因为我不理解代码。但是因为我跟随的所有教程都在某些方面打破了。
首先我尝试了this,但是当javah
命令无效时,我的工作被缩短了错误消息:Error: Could not find or load main class com.sun.tools.javah.Main
然后我继续创建自己的ddl,以便我可以从C库中调用它们。找到了this video,我可以在微软页面上关注它和它的页面来制作dll。请注意,我完全有能力遵循这个例子。我挣扎的那一部分是如果我没有头文件或DLL文件的lib文件会发生什么。所以我开始关注this example,视觉工作室说导入我不存在。
我发现others能够完全相同的工作。
我做错了什么?最终目标,我想知道如何在视频中创建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调用它。请注意,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,但它也依赖于头文件。请注意,我将通过文档了解函数名称和格式。我只是没有头文件!
答案 0 :(得分:6)
使用C#创建的DLL与其他DLL不同。它们在技术上称为 .NET程序集。它们依赖于公共语言运行时(CLR),就像Java字节码依赖于Java虚拟机一样。您发布链接的视频不是创建.NET程序集,而是创建本机Windows DLL。
显然,如果你在一个进程中加载了两个虚拟机,事情会变得复杂。他们对如何使用内存,垃圾收集,内存中的对象布局,线程等都有自己的想法。
这并不是说你想要做的事情是不可能的,但它比用LoadLibrary
加载原生图书馆要复杂得多。
您可能希望了解以下项目以帮助您: