相关疑难解决方法(0)

用C/C++编译DLL,然后从另一个程序中调用它

我想制作一个简单,简单的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)

c c++ vb6 dll gcc

58
推荐指数
3
解决办法
11万
查看次数

从C++调用DLL中的函数

我在VS 2008中有一个解决方案,里面有2个项目.一个是用C++编写的DLL,另一个是从空白项目创建的简单C++控制台应用程序.我想知道如何从应用程序调用DLL中的函数.

假设我从一个空白的C++项目开始,我想调用一个名为的函数 int IsolatedFunction(int someParam)

我怎么称呼它?

c++ dll dllimport visual-studio-2008

39
推荐指数
4
解决办法
10万
查看次数

在没有标题的情况下调用c ++ dll中的函数

我想从一个DLL调用一个方法,但我没有源文件头文件.我试图使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?

有没有办法调用这种方法?

谢谢,

c++ dll signature method-signature dumpbin

14
推荐指数
4
解决办法
2万
查看次数

如何在Microsoft Visual C++中使用dllimport

我有一个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

c++ linker dllimport linker-errors visual-c++

6
推荐指数
1
解决办法
8645
查看次数

显式加载 DLL

我正在尝试显式链接 DLL。除了 DLL 文件本身以及有关类及其成员函数的一些文档之外,没有其他资源可用。

从文档来看,每个类都有自己的

  1. 成员 typedef
    示例:typedef std::map<std::string,std::string> Server::KeyValueMap, typedef std::vector<std::string> Server::String Array
  2. 成员枚举
    示例:enum Server::Role {NONE,HIGH,LOW}
  3. 成员函数
    示例: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)

c++ dll explicit class

5
推荐指数
1
解决办法
4万
查看次数

如何使用DLL?

我知道如果我有一个.a或.so文件和该库的头文件(例如SystemC),我应该1.包含头文件2.链接相应的库.

但我不能只处理.dll文件,因为我也可以链接它,但没有一个听众文件来包含和使用命令.有人解释我是什么样的.dll-s存在以及如何使用它们?是否可以使用任何.dll文件,或者它应该是特定类型的.dll才能集成到我的应用程序中?

c++

3
推荐指数
1
解决办法
1万
查看次数

与DLL混淆.没有.lib或.h

我目前有一个使用32位dll的C#项目.我想要做的是在C++项目中使用dll,遗憾的是项目中引用的dll没有.h或.lib文件,所以我对如何访问dll中的类或使用我感到困惑我在C++项目中的DLL文件(Visual Studio 2010).我在这里读到,如果一个dll文件包含类,它很可能是一个COM组件.有关我应该查看的内容的任何建议,以便集成和使用该DLL中的方法和对象.

更新:

我通过执行import语句检查它是否是COM.但是我得到了"找不到.tlb文件".然后我决定使用依赖walker检查任何导出的方法(对象)似乎没有.我点击了主文件(已突出显示),但看不到任何导出的功能.我应该检查下一步的任何提示?这是我从依赖walker得到的. 在此输入图像描述

c++ com dll

0
推荐指数
1
解决办法
252
查看次数