这是我第一次使用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
。
您可能想看看以下项目来帮助您:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句