在VS2008环境下编写C语言DLL,并在C++和C#项目下调用

转载 2014年11月17日 08:50:36

一、编写DLL

    a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击“下一步”,

       应用程序类型选择:“DLL(D)”,附加选项:空项目(E),然后完成。

    b)编写头文件(edrlib.h):

#ifdef __cplusplus   
#define EXPORT extern "C" __declspec (dllexport)   
#else   
#define EXPORT __declspec (dllexport)   
#endif   
   
EXPORT 
void  EdrCenterTextA();   
EXPORT 
void  EdrCenterTextW();   
EXPORT 
int  IncCounter();   
#ifdef UNICODE   
#define EdrCenterText EdrCenterTextW   
#else   
#define EdrCenterText EdrCenterTextA   
#endif  

注解:

    i. 定义 __cplusplus表示是供C++程序中调用。

    ii.__declspec (dllexport)表示函数调用方式,此处表示VS2008工程属性调用的默认方式。更改方法:

    右击项目--属性--配置属性--C/C++--高级,更改右侧“调用约定”。

    c)编写DLL文件(edrlib.cpp):

#include "windows.h"   
#include 
"edrlib.h"   
//counter供调用该DLL的所有应用程序共享   
#pragma data_seg("shared")   
int counter=0;   
#pragma comment(linker,
"/SECTION:shared,RWS")   
   
int WINAPI DllMain(_In_ HANDLE _HDllHandle, _In_ DWORD _Reason, _In_opt_ LPVOID _Reserved)   
{   
    
return TRUE;   
}
   
   
EXPORT 
void   EdrCenterTextA()   
{   
    MessageBox(NULL,TEXT(
"调用DLL函数!"),TEXT("ASSIC版本"),MB_OK);   
       
}
   
EXPORT 
void  EdrCenterTextW()   
{   
    MessageBox(NULL,TEXT(
"调用DLL函数!"),TEXT("UNICODE版本"),MB_OK);   
   
}
   
   
EXPORT 
int  IncCounter()   
{   
    
return ++counter;   
}
  

  c)编译生成DLL。


二、调用DLL

   方法一、

   1。新建Win32应用程序空项目。

   2。把生成的dll、lib这2个文件复制到新建的目录下。

   3。添加导入库:工具--项目和解决方案--VC++目录,选择右侧“显示以下内容的目录”下的“库文件”,把lib所在目录添加。

   4。头文件:edrlib.h(与编写DLL中一样)

   5。源文件:main.c

/*#define cplusplus*/ //c++调用方式   
#include "windows.h"   
#include 
"edrlib.h"   
#pragma comment(lib,
"edrlib.lib")   
   
int WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )   
{   
   
    TCHAR buf[
32];   
    wsprintf(buf,L
"now,counter=%i",IncCounter());   
    MessageBox(NULL,buf,L
"--",MB_OK);   
    EdrCenterText();   
    
return 0;   
}
  

解释: 
   可注释#pragma comment(lib,"TestDLL2.lib")这条,但必须设置链接库,方法:

   右击项目--属性--配置属性--链接器--输入--附加依赖项:edrlib.lib

  6.运行测试成功。

【以上内容转自:http://blog.csdn.net/breezes2008/archive/2010/02/25/5326861.aspx

3、在C#中调用DLL

此示例使用 C 程序创建一个 DLL,在下一示例中将从 C# 程序调用该 DLL。

   
// cmdll.c// Compile with: /LDint __declspec(dllexport) SampleMethod(int i){   return i*10;}

  如果是Web项目,把DLL复制到bin目录下。

  如果是桌面程序,把DLL复制到可执行行文件目录下。

引用代码:

using System;using System.Runtime.InteropServices;public class MainClass {   [DllImport("Cmdll.dll")]   public static extern int SampleMethod(int x);   static void Main()    {      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));   }}



from:http://apps.hi.baidu.com/share/detail/33471191

VS2008创建dll,并使用dll

原来一直使用vc6.0做开发,但是公司主要使用vs2008工具,刚开始使用的时候感觉非常不好用,但是一周下来,不禁感叹,还是新的好啊,嘿嘿! 这里总结一下vs2008下创建dll并使用dll导出...
  • hyugahinat
  • hyugahinat
  • 2012年07月03日 11:18
  • 8576

使用extern "C"改善显式调用dll

extern "C"的简单解析         我们前面介绍了显式调用dll的方法,例如  http://www.cnblogs.com/laogao/archive/2012/12/07/280...
  • xiamentingtao
  • xiamentingtao
  • 2016年04月04日 11:10
  • 1586

关于extern ”C“以及vs2008里的实例

1.首先介绍一下vs2008对C和C++文件的分别编译 在一个工程下分别编译C和C++文件并链接之...
  • j2370530
  • j2370530
  • 2014年04月07日 22:16
  • 1014

在VS2008环境下编写C语言DLL,并在C++和C#项目下调用

一、编写DLL     a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击“下一步”,        应用程序类型选择:“DLL(D)”,附加选项:空项目...
  • le_zhou
  • le_zhou
  • 2014年11月17日 08:50
  • 911

VS2008用C++封装DLL

首先说明一点,网上关于在C++下封装DLL已经很多了,这里对这些做一个总结,同时对我在做项目过程中出现的问题进行记录。 首先一点就是在新建工程的时候,新建Win32控制台应用程序,勾选DLL...
  • ifresh
  • ifresh
  • 2013年01月04日 17:44
  • 2268

C#调用C++编写的DLL函数, 以及各种类型的参数传递

1. 如果函数只有传入参数,比如: C/C++ Code Copy Code To Clipboard //C++中的输出函数 int __declspec(dllexport) te...
  • vito13
  • vito13
  • 2017年03月31日 15:30
  • 598

在C#中调用C语言写的动态链接库 DLL

1.首先将相关的C语言接口的DLL文件复制到bin\Debug                        2.添加 using System.Windows.Shapes;  3. 在类中用一下方...
  • misakahina
  • misakahina
  • 2014年03月14日 11:11
  • 1618

VS2008动态链接库(DLL)的创建与导入

一、创建新的动态链接库(DLL)项目 从“File”菜单中,选择“New”,然后选择“Project…”。 如下图:在“项目类型”窗格中,选择“Visual C++”下的“Win32”。在...
  • hanghangde
  • hanghangde
  • 2016年04月11日 19:43
  • 1991

Lib Dll在VS2008下的编译和使用-持续更新,欢迎拍砖

1 DLL LibStatic Lib的区别 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link ...
  • xidianzhimeng
  • xidianzhimeng
  • 2013年10月10日 20:14
  • 4941

C#调用C/C++动态链接库(.dll)详解

第一篇编译C的动态连接库 在实际工作中,我们经常会将C语言中的.lib和.h文件(静态库)编译成动态连接库.dll文件(这里只提供这两种文件,没有完整的工程),以提供给其他语言平台调用。 ...
  • tery001
  • tery001
  • 2014年06月04日 15:21
  • 1662
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VS2008环境下编写C语言DLL,并在C++和C#项目下调用
举报原因:
原因补充:

(最多只允许输入30个字)