C++代码封装成dll供C#中调用、调用dll无可用源
C#工程不可以直接調用C++的頭文件和Lib庫等
所以在程序中C#需要調用的現象,先將C++的東西封裝成動態鏈接庫,再調用
若調用dll時顯示:無可用源調用,說明導入的DLL路徑不對。
靜態庫和動態庫區別:
靜態庫和動態庫是兩種共享程序代碼的方式,它們的區別是:靜態庫在程序的鏈接階段被復制到了程序中,和程序運行的時候沒有關系;動態庫在鏈接階段沒有被復制到程序中,而是程序在運行時由系統動態加載到內存中供程序調用。使用動態庫的優點是系統只需載入一次動態庫,不同的程序可以得到內存中相同的動態庫的副本,因此節省了很多內存
debug模式與release模式
編譯.EXE 應用程序有兩種模式:Debug和Release,其中,D模式下表示調試,生成的exe文件中包含了調試信息的接口,R模式下是發行版exe程序,生成的exe文件不包含調試信息,程序經過優化,效率高內存小;所以在移植到其他的電腦上使用時,優先考慮使用Release模式生成.exe文件;
托管和非托管
C++是非托管代碼,C#是托管代碼,若C#要調用C++的話,需要將C#代碼封裝成托管代碼,編譯成dll才可以使用。托管代碼 (managed code) :由公共語言運行庫環境(cls而不是直接由操作系統)執行的代碼。托管代碼應用程序可以獲得公共語言運行庫服務,例如自動垃圾回收、運行庫類型檢查和安全支持等。這些服務幫助提供獨立于平臺和語言的、統一的托管代碼應用程序行為。
非托管代碼 (Unmanaged Code) :在公共語言運行庫(cls)環境的外部,由操作系統直接執行的代碼。非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務;它與托管代碼不同,后者從公共語言運行庫中獲得這些服務。非托管代碼的英文名是Unmanaged Code ,它是在公共語言運行庫環境的外部,由操作系統直接執行的代碼。
托管類clr類。
C++動態鏈接庫的建立
2 自動生成的實例
3 生成解決方案,debug中
4 引用dll文件和Lib庫文件 包含附加目錄include
包含附加庫目錄
添加: lib庫
C#中調用C++的動態鏈接庫
using System.Runtime.InteropServices;
[DllImport(@"E:\language\C#\DFUSource\Debug\DFUSource.dll", EntryPoint = "fnDFUSource")]
extern static int fnDFUSource();
打印wchar_t,使用printf("%s")只能打印首字母,使用printf("%ls")可以將字符全部打印。
總結
以上是生活随笔為你收集整理的C++代码封装成dll供C#中调用、调用dll无可用源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue中实现汉字转化拼音
- 下一篇: Python tkinter窗口最大化处