当前位置 : 主页 > 网络编程 > c#编程 >

C#如何调用MFC窗口DLL

来源:互联网 收集:自由互联 发布时间:2023-01-31
目录 C#调用MFC 窗口 DLL MFC DLL MFC DLL属性 C# 调用 C++ MFC DLL C++ MFC DLL 的封装 C# 中调用,CharSet须设置为多字节的 Ansi C#调用MFC 窗口 DLL MFC DLL 创建一个窗口类,加public和AFX_EXT_CLASS MFC DLL属性
目录
  • C#调用MFC 窗口 DLL
    • MFC DLL
    • MFC DLL属性
  • C# 调用 C++ MFC DLL
    • C++ MFC DLL 的封装
    • C# 中调用,CharSet须设置为多字节的 Ansi

C#调用MFC 窗口 DLL

MFC DLL

创建一个窗口类,加public和AFX_EXT_CLASS

MFC DLL属性

注意

  • MFC的使用:在共享DLL中使用MFC
  • 公共语言运行时支持:公共语言运行时支持(/clr)

在预处理器中添加_AFXEXT

在项目名称.cpp里添加要输出的函数

注意第一行AFX_MANAGE_STATE(AfxGetStaticModuleState())不可少

C# Application

添加引用:

然后将MfcDll.dll和MfcDll.lib放在C# Application里的Debug下

Form1.cs添加:

using System.Runtime.InteropServices;

进行如下调用:

若是报错PInvoke签名不对,CallingConvention=CallingConvention.StdCal改成CallingConvention = CallingConvention.Cdecl

C# 调用 C++ MFC DLL

C++ MFC DLL 的封装

创建 MFC DLL 项目

选择 DLL type 为 Regular DLL using shared MFC DLL

设置项目属性的 Character Set 为 Use Multi-Byte Character Set,若不设置,接收的字符串只有一个字符

方法需要被导出,否则导出名称会被自动命名,具体如下

extern "C" __declspec(dllexport) BOOL AddSignature(char* csFileFullName)
{
    AfxMessageBox(csFileFullName);
    return true;
}

C# 中调用,CharSet须设置为多字节的 Ansi

[DllImport("CppDllTest.dll", EntryPoint = "AddSignature", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern bool AddSignature(string path);
 
public static bool MyAddSignature(string strMy)
{
    return AddSignature(strMy);
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

上一篇:C#中Lambda表达式的用法
下一篇:没有了
网友评论