基本DLL函数

时间:2017-07-25 10:51:21

标签: c++ function dll compilation

我是C和编程世界的新手! 试图创建一个简单的DLL文件,打印一个消息框Hello World!

这是cpp

//main.cpp    


#include "main.h"

// a sample exported function
void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{
    MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION);
}
extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

switch (fdwReason)
{
    case DLL_PROCESS_ATTACH:
        // attach to process
        // return FALSE to fail DLL load
        break;

    case DLL_PROCESS_DETACH:
        // detach from process
        break;

    case DLL_THREAD_ATTACH:
        // attach to thread
        break;

    case DLL_THREAD_DETACH:
        // detach from thread
        break;
}
return TRUE; // succesful
}

这里是h

//main.h

#ifndef __MAIN_H__
#define __MAIN_H__

#include <windows.h>

/*  To use this exported function of dll, include this header
 *  in your project.
 */

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif


#ifdef __cplusplus
extern "C"
{
#endif

void DLL_EXPORT SomeFunction(const LPCSTR sometext);

#ifdef __cplusplus
}
#endif

#endif // __MAIN_H__

重点是,一旦我创建了一个加载DLL的控制台,我就必须从中调用该函数!我怎么能简单地导出所有函数而不给它们一个名字,只是从控制台中的dll加载所有内容?喜欢如果有人想用我的dll并且不知道该怎么叫?或者,如果我有一个exe调用一个DLL,我想创建一个自定义dll与我的函数调用?这不是黑客的行为! 对不起技能thx

1 个答案:

答案 0 :(得分:0)

&#34;如果有人想要使用我的dll并且不知道该怎么叫&#34; 怎么办?如果有人使用你的DLL,他需要知道该叫什么,那里不是简单的方法(因此你通常提供* .h函数声明)。

实际上有一些方法可以枚举DLL提供的函数(参见例如:Win32 API to enumerate dll export functions?),但这并不是大多数DLL库通常使用的方式。

请注意,您可以枚举函数名称,但是如果没有标题,可能并不总是很容易找出要传递给每个函数的参数以及函数返回的类型。它通常可以用C ++导出的函数完成(C ++名称修改提供参数计数和类型信息),但如果函数导出为普通的&#34; C&#34;则不容易。 function(其中名称是一个简单的函数名而没有变形)。