1、编写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。

2、调用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环境下编写C语言DLL,并在C++和C#项目下调用 (转载)的更多相关文章

  1. 使用vim在Linux下编写C语言程序

    1.进入字符界面 2.创建文件夹用于存放源文件 mkdir helloworld    //创建文件夹命令 cd helloworld        //进入新建的文件夹,这里应该说目录比较好,win ...

  2. Ubuntu下编写C语言程序

    新建C文件,新建一个文件用touch,新建文件夹用mkdir. 打开文本编辑器,编辑C文件,命令用gedit xxx.C 编写C程序,Ctrl+S保存 编译运行 1.gcc命令是编译 -o是可选项 是 ...

  3. 在VC6.0下运行C语言程序,以及编程入门必备的常识类小知识!

    今天给大家分享在VC6.0环境下编写C语言程序的基本步骤,为初学者打开学习C语言的第一道门.具体步骤如下(如果需要软件资源,可以留言): 1)新建工作区 依次点击 文件--新建--工作区 或是Ctrl ...

  4. windows下编写dll

    dll的优点 简单的说,dll有以下几个优点: 1) 节省内存.同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中.如果 ...

  5. 【Python基础学习一】在OSX系统下搭建Python语言集成开发环境 附激活码

    Python是一门简单易学,功能强大的编程语言.它具有高效的高级数据结构和简单而有效的面向对象编程方法.Python优雅的语法和动态类型以及其解释性的性质,使它在许多领域和大多数平台成为编写脚本和快速 ...

  6. 闲来瞎扯 -- 在vs2008下编写linux程序

    虽说vim很强大,但是个人感觉器代码提示功能不如visual assist来的强大.如何使用visual assist来实现代码的提示功能呢? 首先说明我的环境 : 宿主机是xp(O(∩_∩)O~还是 ...

  7. VS2010编写32位和64位dll环境配置,以及判断dll是多少位

    前言 最近在编写dll注入程序的时候,因为想注入到系统进程,结果发现总是注入失败.自闭了好长一会发现我忘记了我的系统是64位的,系统进程也是64位的,而我编写的待注入的DLL是32位了,所以才导致失败 ...

  8. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  9. windows下的go语言的环境搭建和初探

    闲话不说,直入主题. 1.准备工具 a.windows下的Go语言开发安装包 官方下载地址:https://code.google.com/p/go/downloads/list b.Go语言中文官网 ...

随机推荐

  1. VirtualBox Share Folder

    转载:https://www.cnblogs.com/Dennis-mi/articles/5896586.html 使用virtualbox最方便的host-guest交换文件方案莫过于共享文件夹功 ...

  2. 对于multitaper多窗口谱估计的理解及步骤 (对应matlab中pmtm函数)谱减法相关

    对于多窗口谱估计的理解 目录 对于多窗口谱估计的理解 0. 缘起 1. PMTM 含义 2. 与我们常用的周期谱估计的区别 3. 计算过程 5. 多窗/单窗谱估计结果对比 6. 程序如何生成多窗 - ...

  3. Kioskcached(1)之 Memcached & Redis & Kioskcached 性能测试对比

    前言:本文仅仅是作者自己在学习过程中的一次实验而已,或许因为各种因素会导致实验结果与你之前的认知不太一样,因此请你带着批判的眼光看待本文(本文不具有实际环境的参考性). 一:测试目的 在了解了一些No ...

  4. 攻防世界 WEB 高手进阶区 NSCTF web2 Writeup

    攻防世界 WEB 高手进阶区 NSCTF web2 Writeup 题目介绍 题目考点 php基本函数语法 加密解密函数 base64_decode().str_rot13() 字符串反转函数 str ...

  5. JavaScript数组方法大集合

    JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...

  6. go 集合

    p.p1 { margin: 0; font: 12px ".PingFang SC"; color: rgba(69, 69, 69, 1) } span.s1 { font: ...

  7. IDEA常用优化设置

    1.设置鼠标悬浮提示 Editor->General 这里要勾选下,后面设置的是延迟时间 默认半秒:设置后,我们鼠标移动到类上看看: 2.显示方法分隔符 Editor->General - ...

  8. hudi clustering 数据聚集(三 zorder使用)

    目前最新的 hudi 版本为 0.9,暂时还不支持 zorder 功能,但 master 分支已经合入了(RFC-28),所以可以自己编译 master 分支,提前体验下 zorder 效果. 环境 ...

  9. IO流(二)

    一:字符流 字符输入流 写入文件字符流 import java.io.FileWriter; import java.io.IOException; //fileWriter public class ...

  10. Python基础(序列化)

    #pickling import pickle,json # d = dict(name='傻狗1',age=300,score=100) # d1 = pickle.dumps(d)#pickle. ...