Dll&Lib的生成以及调用

0 前言
在两种情况下生成dll和lib(1.直接给c++用; 2.给java或者c#用),其中,前者最简单,后者需要在dllmain()中生成。
版本一
在C++下的生成
假设有以下代码,现在想生成action()函数:

#include XX
using namespace XX;
void action(int a, int b)
{ XXX;}
int main()
{action(X,Y);
 return 0;}

新建一个dll项目-win32项目(不建议选择win32控制台应用程序)-(如果只想得到lib,则在建立项目的时候选择静态库,选择dll),然后将这个代码写进去,变成了这样:

#include XX
using namespace XX;
extern "C" __declspec(dllexport) void action(int a, int b);
void action(int a, int b)
{
  XXX;
}

可以在属性-常规-配置类型 中选择生成的类型,build就可以生成dll和lib。
在C++下的调用
调用lib的时候仍然需要dll,老实放在项目根目录之下吧。

#include XX
using namespace XX;
#pragma comment(lib,"action.lib")
extern "C"_declspec(dllimport) void action(int a, int b);//别用dllexport
int main()
{
  action(X,Y);
  return 0;
}

调用dll就比较麻烦,但对我来说不是事:

#include <windows.h>
#include <stdio.h>
#include<iostream>
using namespace std;

typedef int(*ApiAdd)(int a, int b);

int main()
{
    //Load DLL
    HINSTANCE hInstance = LoadLibrary(TEXT("api_add.dll"));
    if (hInstance == NULL)
    {
        printf("Error: unable to load DLL\n");
        return 1;
    }
    //Get function address
    ApiAdd apiadd = (ApiAdd)::GetProcAddress(hInstance, "FaceAngle");
    if (apiadd == NULL)
    {
        printf("Error: unable to find DLL function\n");
        FreeLibrary(hInstance);
        return 1;
    }
    //Call function
    int ret = apiadd(1, 3);
    //Unload DLL file
    FreeLibrary(hInstance);
    return 0;
}

版本二
在java和c#下的生成
新建项目-win32项目(别选win32控制台)-dll+预编译头(其他的就不要了) 完成后会自动生成好几个文件,还有一个dllmain。
在xxdll.cpp里添加想要生成的函数,并创建对应的头文件。

#include <vector>
#include <windows.h>

using namespace std;

//当调用不成功的时候请使用EXTERN_C 
extern "C" _declspec(dllexport) int Add_func(int a, int b);

然后在 属性-c/c++-高级-编译为-编译为 C++ 代码 (/TP) build就OK了!

如果你只想运行exe却不出现cmd窗口咋办?在main里输入这个:

HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值