zoukankan      html  css  js  c++  java
  • c#调用c++的dll

    制作c++的dll

    // MyCppDll.cpp : 定义 DLL 应用程序的导出函数。
    
    // 这一句必须
    #include "stdafx.h"
    // 导入自己想要的头文件
    #include <windows.h>
    
    // 为函数加入以下声明即可导出:extern "C" extern __declspec(dllexport) 
    //	另外,加入以上声明后函數調用約定默认为“Cdecl”,若要强制指定为,请在函数的返回类型之后加入“__stdcall”关键字
    extern "C" extern __declspec(dllexport)  LPCWSTR __stdcall Hello(LPCWSTR lpTitle,LPCWSTR lpContent)
    {
    	MessageBox(NULL,lpContent,lpTitle,0);
    	return lpContent;
    }
    
    
    
    
    
    // 定义 DLL 应用程序的入口点。
    // 比如当dll刚被载入至内存或卸载时可以做一些事
    BOOL APIENTRY DllMain( HMODULE hModule,
    	DWORD  ul_reason_for_call,
    	LPVOID lpReserved
    	)
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    		Hello(L"",L"DLL_PROCESS_ATTACH");
    		break;
    	case DLL_THREAD_ATTACH:
    		Hello(L"",L"DLL_THREAD_ATTACH");
    		break;
    	case DLL_THREAD_DETACH:
    		Hello(L"",L"DLL_THREAD_DETACH");
    		break;
    	case DLL_PROCESS_DETACH:
    		Hello(L"",L"DLL_PROCESS_DETACH");
    		break;
    	}
    
    	return TRUE;
    }
    




    写c#

    using System;
    using System.Runtime.InteropServices;
    
    
    namespace MyCsharpConsoleApplication
    {
        class Program
        {
            [DllImport("MyCppDll", CallingConvention = CallingConvention.StdCall)]
            extern static string Hello(string title, string content);
    
            static void Main()
            {
                var ret = Hello(@"hello你好".ToAnsi(), @"theraphy大叮当".ToAnsi());
                Console.WriteLine(ret);
            }
        }
    
        static class Helper
        {
            /// <summary>
            /// 将Unicode字符串转换成多字节字符串
            /// </summary>
            /// <param name="content"></param>
            /// <returns></returns>
            public static string ToAnsi(this string content)
            {
                return System.Text.Encoding.Default.GetString(System.Text.Encoding.Unicode.GetBytes(content));
            }
        }
    }
    


    也可以直接声明Unicode编码传递

    using System;
    using System.Runtime.InteropServices;
    
    
    namespace MyCsharpConsoleApplication
    {
        class Program
        {
            [DllImport("MyCppDll", CallingConvention = CallingConvention.StdCall,CharSet = CharSet.Unicode)]
            extern static string Hello(string title, string content);
    
            static void Main()
            {
                var ret = Hello(@"hello你好", @"theraphy大叮当");
                Console.WriteLine(ret);
            }
        }
    }
    



    源码下载

  • 相关阅读:
    Python学习 —— 阶段综合练习三
    Git 学习(二)版本库创建
    Python学习(九)IO 编程 —— 文件读写
    Pydoc 本地 HTML 形式查看
    Python学习(九)IO 编程 —— 文件夹及文件操作
    在 Virtual Box 安装 Mac Os 并安装 Qt 开发应用
    滚动歌词制作 之 ncm格式转mp3
    Web —— 在自己电脑搭建网站,发布到公网,并使用域名访问
    版本控制软件的使用
    C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数
  • 原文地址:https://www.cnblogs.com/beta2013/p/3377326.html
Copyright © 2011-2022 走看看