我想制作一个简单,简单的DLL,它导出一个或两个函数,然后尝试从另一个程序中调用它...到目前为止,我看到的每个地方,都是复杂的事情,将事物连接在一起的不同方式,奇怪的问题,我还没有开始意识到存在......我只是想通过做这样的事情来开始:
创建一个导出一些函数的DLL,比如
int add2(int num){
return num + 2;
}
int mult(int num1, int num2){
int product;
product = num1 * num2;
return product;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用MinGW进行编译,我想在C中做到这一点,但如果在C++中做任何真正的差异,我也想知道它们.我想知道如何将该DLL加载到另一个C(和C++)程序,然后从中调用这些函数.在玩了一些DLL之后,我的目标是通过将DLL加载到visual basic中来制作用于C(++)代码的VB前端(我有视觉工作室6,我只想制作一些表格和这些表单上的对象的事件,调用DLL).
我需要知道如何调用gcc(/ g ++)来创建一个DLL,还需要知道如何编写(/生成)导出文件...以及我能在DLL中做什么/不能做什么(比如,我可以采取来自VB前端的指针/引用的参数?DLL可以在前端调用理论函数吗?或者有一个函数从VB调用"函数指针"(我甚至不知道是否可能)它?)我很确定我不能将变量传递给DLL ......但这就是我所知道的.
好吧,我想出了如何使用gcc编译它,以使我运行的dll
gcc -c -DBUILD_DLL dll.c
gcc -shared -o mydll.dll dll.o -Wl,--out-implib,libmessage.a
Run Code Online (Sandbox Code Playgroud)
然后我有另一个程序加载它并测试函数,它工作得很好,非常感谢建议,但我尝试用VB6加载它,就像这样
Public Declare Function add2 Lib "C:\c\dll\mydll.dll" (num As Integer) As Integer
Run Code Online (Sandbox Code Playgroud)
然后我只是从表单调用add2(text1.text),但它给了我一个运行时错误:
"在C:\ c\dll\mydll.dll中找不到DLL入口点add2"
这是我为DLL编译的代码:
#ifdef BUILD_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
EXPORT int __stdcall add2(int num){
return num + 2; …Run Code Online (Sandbox Code Playgroud) 我在VS 2008中有一个解决方案,里面有2个项目.一个是用C++编写的DLL,另一个是从空白项目创建的简单C++控制台应用程序.我想知道如何从应用程序调用DLL中的函数.
假设我从一个空白的C++项目开始,我想调用一个名为的函数 int IsolatedFunction(int someParam)
我怎么称呼它?
我想从一个DLL调用一个方法,但我没有源文件头文件.我试图使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?
有没有办法调用这种方法?
谢谢,
我有一个DLL,我想使用它的一些功能.
#include <iostream>
using namespace std;
extern "C" __declspec(dllimport) int Initialize(char* localPort, char* adminServerName, int rpcTimeout);
int main()
{
int res = Initialize("7864", "6000@kabc", 10000);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我没有DLL的.lib文件,所以无论如何我可以链接到它.我想到的一件事是使用LoadLibrary函数,然后使用GetProcAddress().还有其他方法吗?
当我编译以下代码时
错误LNK2019:函数_main中引用的未解析的外部符号_ imp _Initialize
致命错误LNK1120:1个未解析的外部因素
我得到了上述错误
我正在使用Windows和Visual Studio 2008
我正在尝试显式链接 DLL。除了 DLL 文件本身以及有关类及其成员函数的一些文档之外,没有其他资源可用。
从文档来看,每个类都有自己的
typedef std::map<std::string,std::string> Server::KeyValueMap, typedef std::vector<std::string> Server::String Arrayenum Server::Role {NONE,HIGH,LOW}void Server::connect(const StringArray,const KeyValueMap), void Server::disconnect()实现来自谷歌搜索的代码,我设法加载可以调用断开连接函数的dll。
目录.h
LPCSTR disconnect = "_Java_mas_com_oa_rollings_as_apiJNI_Server_1disconnect@20";
LPCSTR connect =
"_Java_mas_com_oa_rollings_as_apiJNI_Server_1connect@20";
Run Code Online (Sandbox Code Playgroud)
我从depends.exe 中获取了上面的函数名称。这就是 C++ 中所谓的修饰/修饰函数名称吗?
主程序
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include "dir.h"
typedef void (*pdisconnect)();
int main()
{
HMODULE DLL = LoadLibrary(_T("server.dll"));
pdisconnect _pdisconnect;`
if(DLL)
{
std::cout<< "DLL loaded!" << std::endl;
_disconnect = (pdisconnect)GetProcAddress(DLL,disconnect);
if(_disconnect)
{
std::cout << "Successful link to …Run Code Online (Sandbox Code Playgroud) 我知道如果我有一个.a或.so文件和该库的头文件(例如SystemC),我应该1.包含头文件2.链接相应的库.
但我不能只处理.dll文件,因为我也可以链接它,但没有一个听众文件来包含和使用命令.有人解释我是什么样的.dll-s存在以及如何使用它们?是否可以使用任何.dll文件,或者它应该是特定类型的.dll才能集成到我的应用程序中?
我目前有一个使用32位dll的C#项目.我想要做的是在C++项目中使用dll,遗憾的是项目中引用的dll没有.h或.lib文件,所以我对如何访问dll中的类或使用我感到困惑我在C++项目中的DLL文件(Visual Studio 2010).我在这里读到,如果一个dll文件包含类,它很可能是一个COM组件.有关我应该查看的内容的任何建议,以便集成和使用该DLL中的方法和对象.
更新:
我通过执行import语句检查它是否是COM.但是我得到了"找不到.tlb文件".然后我决定使用依赖walker检查任何导出的方法(对象)似乎没有.我点击了主文件(已突出显示),但看不到任何导出的功能.我应该检查下一步的任何提示?这是我从依赖walker得到的.
