调用c++动态库函数vs2008

c++ exe调用 c++ dll:


新建项目 c++ win32应用程序   dll


//dlldemo.dll 文件代码


C++语言:


#include "stdafx.h"


#include <string.h>


#include <stdio.h>


HMODULE g_hModule;


// 自定义导出函数


extern "C" __declspec(dllexport) void ExportFunc(LPCTSTR pszContent)


{


wchar_t sz[MAX_PATH]; 


   ::GetModuleFileName(g_hModule, sz, MAX_PATH);


::MessageBox(NULL, pszContent, L"这样啊", MB_OK);


}


新建项目 c++ win32 控制台


// import.cpp : 定义控制台应用程序的入口点。


//


C++语言:


#include "stdafx.h"


#include <windows.h>


// 声明函数原形


typedef void (*PFNEXPORTFUNC)(LPCTSTR);


int _tmain(int argc, _TCHAR* argv[])


{


     // 加载DLL库


        HMODULE hModule = ::LoadLibrary(L"dlldemo.dll");


        if(hModule != NULL)





   // 取得ExportFunc函数的地址


   PFNEXPORTFUNC mExportFunc = (PFNEXPORTFUNC)::GetProcAddress(hModule, "ExportFunc");


   if(mExportFunc != NULL)


   {


    mExportFunc(L"大家好!");


    


   }


            


   // 卸载DLL库


   ::FreeLibrary (hModule); 


}


        return 0;


return 0;


}


分别生成后,到debug或者release中分别把exe和dll复制到一起就ok了。。。


成功后会有弹出框


c# exe调用c++ dll:


新建 c++ win32程序 dll


// cdedll.cpp : 定义 DLL 应用程序的导出函数。


//


#include "stdafx.h"


#include <string.h>


extern "C" __declspec(dllexport) int mySum(int a,int b,int *c)





    *c=a+b; 


    return *c;


}


新建 c# 控制台


//c#的exe文件代码


C#语言:


using System;


using System.Collections.Generic;


using System.Text;


using System.Runtime.InteropServices;


namespace TestEmbedCCalling


{


    class Program


    {


        [DllImport("cdedll.dll", EntryPoint = "mySum", CharSet = CharSet.Unicode,


            CallingConvention = CallingConvention.StdCall)]


        public static extern int mySum(int a, int b, ref int c);


        static void Main(string[] args)


        {


            int c = 0;


            Console.WriteLine(mySum(2, 3, ref c));


            Console.Read();


        }


    }


}

你可能感兴趣的:(调用c++动态库函数vs2008)