• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 14,  comments - 4,  trackbacks - 0

             

            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

            posted on 2011-05-08 10:41 mr_chen 閱讀(3594) 評論(1)  編輯 收藏 引用 所屬分類: C#開發筆記

            FeedBack:
            # re: 在VS2008環境下編寫C語言DLL,并在C++和C#項目下調用 (轉載)
            2013-07-23 13:08 | Kecise
            你的文章解決了我的一個大問題!非常感謝!  回復  更多評論
              
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿

            隨筆檔案(14)

            文章分類(8)

            文章檔案(11)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久午夜羞羞影院免费观看| 品成人欧美大片久久国产欧美...| 亚洲国产精品狼友中文久久久| 久久久久国产一级毛片高清板| 一本一本久久a久久精品综合麻豆| 久久久久亚洲精品日久生情 | 欧美va久久久噜噜噜久久| 久久精品国产网红主播| 精品久久久久一区二区三区| 久久久久久伊人高潮影院| 国产精品久久自在自线观看| 亚洲国产成人久久一区WWW| 亚洲精品无码成人片久久| 精品乱码久久久久久夜夜嗨| 亚洲色大成网站www久久九| 久久国产免费直播| 曰曰摸天天摸人人看久久久| 午夜精品久久久久久中宇| 欧美与黑人午夜性猛交久久久| 蜜桃麻豆www久久| 久久精品国产亚洲AV电影| 久久免费看黄a级毛片| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久久中文字幕日本| 久久精品国产一区二区三区日韩| 九九精品久久久久久噜噜| 久久久久久久综合日本| 亚洲国产成人久久综合一 | 99热成人精品热久久669| 久久精品卫校国产小美女| 久久人人爽人爽人人爽av| 国产精品嫩草影院久久| 久久久久四虎国产精品| 久久线看观看精品香蕉国产| 国内精品久久久久影院一蜜桃| 一本色道久久综合亚洲精品| 久久无码中文字幕东京热| 久久午夜无码鲁丝片秋霞| 久久青青草视频| 久久无码高潮喷水| 久久综合亚洲欧美成人|