zoukankan      html  css  js  c++  java
  • VC将同一份代码同时编译为Dll和Exe的方法

    开发中经常遇到这样的情况,需要开发一个某某功能的接口Dll,但是Dll不能直接调试,你至少需要一个Loader

    但是Loader和Dll本身不在同一个工程里,虽然都在本机的话并不影响源码级调试,但是总感觉如果同一个工程既能作为Dll又能做为独立Exe的话,调试起来会更加方便些

    或者是本来有个控制台版本的Demo,想要修改为Dll形式(一般先写Demo验证思路,所以先Console后Dll的情况会多一些)

    所以,就有了本方法,并非原创

    其实主要思路就是利用宏实现条件编译

    独立Exe测试时经常编译为控制台程序,默认会有一个宏叫做_CONSOLE,入口函数是main

    编译为Dll时,有一个宏叫做_USRDLL,入口函数是DllMain

    所以你可以把代码这么改:

     1 #ifdef _CONSOLE
     2 
     3 int main(int argc,char *argv[])
     4 {
     5     //设置相关参数并调用功能函数,便于调试
     6     return 0;
     7 }
     8 
     9 #else //_USRDLL
    10 
    11 #pragma message("Compile as Dll.
    ")
    12 
    13 //如果使用了def文件来定义导出接口,不要直接加到工程里,否则编译成exe时也会有导出函数,不过并不影响调试
    14 #pragma comment(linker,"/DEF:ARPSpoof.def")
    15 
    16 BOOL APIENTRY DllMain( HANDLE hModule,
    17                       DWORD  ul_reason_for_call,
    18                       LPVOID lpReserved //可以用作某些特殊标志
    19                       )
    20 {
    21     
    22     return TRUE;
    23 }
    24 
    25 #endif

    然后基于控制台版本新增加一个编译配置,去掉_CONSOLE宏,加上_USRDLL宏,并且在Link命令参数里加上“/dll”就可以了。

    相对来说,还是比单独的Loader要方便一些

  • 相关阅读:
    asr相关技术总结
    SLURM 使用基础教程
    FSMN 及其变种 cFSMN DFSMN pyramidal-FSMN
    均方根误差(RMSE),平均绝对误差 (MAE),标准差 (Standard Deviation)
    linux文本编码格式转化 字幕处理
    PyTorch-Kaldi 语音识别工具包
    SRILM Ngram 折扣平滑算法
    awk 调用 shell 命令,并传递参数
    用 scikit-learn 和 pandas 学习线性回归
    逻辑回归 及 实例
  • 原文地址:https://www.cnblogs.com/achillis/p/9383762.html
Copyright © 2011-2022 走看看