C#教程
在擁有Python開發的基礎上學習C#。
因為工作中需要使用相機SDK開發一個簡單的桌面應用程序
問題1:如何在C#項目中引入相機SDK
由于相機文檔中有一個C#的項目demo,分析demo獲取使用方法(如果是急于使用,可直接在demo上進行開發,調整下按鈕改改功能這樣)
由于我主要是用于學習,所以新建個項目C#項目,掛上git(b-1).demo中提供一個cs文件,將相機sdk中的dll進行封裝供c#調用
C#
使用DLLImport進行導入dll,第一個參數為dll文件,函數名關鍵字參數EntryPoint =
這個有點類似于python的裝飾器
[DllImport("MvSmartCamCtrl.dll", EntryPoint = "MV_SC_Connect")]
private static extern Int32 MV_SC_Connect(IntPtr handle);
報錯1,無法加載DLL"MvSmartCamCtrl.dll":找不到指定的模塊。(異常來自 HRESULT:0x8007007E。。
解決:將相關的dll文件復制到所運行的exe文件的目錄下。()
自己實現dll供c#調用
C++的dll準備
將生成的untitled4.dll
復制到c#程序生成的exe的所在目錄
代碼源文件
--------- library.cpp ------------------------------------------------------
extern "C" __declspec(dllexport) int MySquare(int a, int b) {
return a*b;
}
----------------------------------------------------------------------------
編譯聲明
--------- CMakeLists.txt --------------------------------------------------
cmake_minimum_required(VERSION 3.14)
project(untitled4)
set(CMAKE_CXX_STANDARD 14)
add_library(untitled4 SHARED library.cpp )
----------------------------------------------------------------------------
C#的調用準備
c#中定義一個函數
CallingConvention = CallingConvention.Cdecl 該參數解決調用堆棧不對稱
在C#調用MySquare函數進行測試,該函數位于類中。
// 自定義導入測試
[DllImport("untitled4.dll", EntryPoint = "MySquare", CallingConvention = CallingConvention.Cdecl)]
private static extern Int32 MySquare(Int32 a, Int32 b);
字符串格式化
Console.WriteLine("Book 2 title : {0}", Book2.title);
string s = String.Format( "item {0} sells at {1:C}", x, y );
MessageBox.Show(s);
程序結構
visual studio 2017 新建窗體程序結構說明
.
├── .git // git版本
├── .gitattributes // 未知
├── .gitignore // 版本控制忽略
├── .vs // visual studio的項目緩存
├── HymanApp // 項目內容
│ ├── App.config
│ ├── CameraOperator.cs // 相機sdk
│ ├── Form1.Designer.cs // 窗體結構的描述文件,如標簽
│ ├── Form1.cs // 窗體操作綁定的事件
│ ├── Form1.resx //未知,不用管
│ ├── HymanApp.csproj //未知,不用管
│ ├── HymanApp.csproj.user //未知,不用管
│ ├── HymanApp_TemporaryKey.pfx //未知,不用管
│ ├── MvSmartSDK.cs // 相機sdk
│ ├── Program.cs //程序主入口
│ ├── Properties //未知,不用管
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── bin
│ │ ├── Debug // 目前生成代碼在此目錄,exe運行在此目錄
│ │ │ ├── CommunicationProcess.dll
│ │ │ ├── CommunicationProcess.pdb
│ │ │ ├── D3DCompiler_43.dll
│ │ │ ├── FreeImage.dll
│ │ │ ├── HymanApp.application
│ │ │ ├── HymanApp.exe // 可直接雙擊運行
│ │ │ ├── HymanApp.exe.config
│ │ │ ├── HymanApp.exe.manifest
│ │ │ ├── HymanApp.pdb
│ │ │ ├── MvSmartCamCtrl.dll
│ │ │ ├── MvSmartCamCtrl.pdb
│ │ │ ├── SuperRender.dll
│ │ │ ├── app.publish
│ │ │ │ └── HymanApp.exe
│ │ │ ├── d3dx9_43.dll
│ │ │ ├── iconv.dll
│ │ │ ├── libx264-138.dll
│ │ │ ├── libxml2.dll
│ │ │ ├── untitled4.dll // 自定義的dll
│ │ │ ├── zip.dll
│ │ │ └── zlib1.dll
│ │ └── Release
│ │ ├── HymanApp.exe
│ │ ├── HymanApp.exe.config
│ │ └── HymanApp.pdb
│ ├── obj
│ │ ├── Debug
│ │ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ │ ├── HymanApp.Form1.resources
│ │ │ ├── HymanApp.Properties.Resources.resources
│ │ │ ├── HymanApp.application
│ │ │ ├── HymanApp.csproj.CoreCompileInputs.cache
│ │ │ ├── HymanApp.csproj.FileListAbsolute.txt
│ │ │ ├── HymanApp.csproj.GenerateResource.cache
│ │ │ ├── HymanApp.csprojAssemblyReference.cache
│ │ │ ├── HymanApp.exe
│ │ │ ├── HymanApp.exe.manifest
│ │ │ ├── HymanApp.pdb
│ │ │ ├── TempPE
│ │ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ └── Release
│ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ ├── HymanApp.Form1.resources
│ │ ├── HymanApp.Properties.Resources.resources
│ │ ├── HymanApp.csproj.CoreCompileInputs.cache
│ │ ├── HymanApp.csproj.FileListAbsolute.txt
│ │ ├── HymanApp.csproj.GenerateResource.cache
│ │ ├── HymanApp.exe
│ │ ├── HymanApp.pdb
│ │ ├── TempPE
│ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ ├── publish // 發布成iso鏡像安裝
│ │ ├── Application Files
│ │ │ └── HymanApp_1_0_0_0
│ │ │ ├── HymanApp.application
│ │ │ ├── HymanApp.exe.config.deploy
│ │ │ ├── HymanApp.exe.deploy
│ │ │ └── HymanApp.exe.manifest
│ │ ├── HymanApp.application
│ │ ├── autorun.inf
│ │ └── setup.exe
│ └── unititled3.dll // 個人測試導入dll的,這個無效,忽視他
└── HymanApp.sln //visual stuido 的入口,雙擊進入visual studio
備注
- <span id="jump">分析文件變化</span>
希望達到pycharm -> version control -> log 的效果
# 比較兩次提交的內容差異
git diff HEAD~1 HEAD
# 查看歷史 文件的變更記錄
git log --stat
visual studio 快捷鍵
注釋: Ctrl+k,Ctrl+c
取消注釋:Ctrl+k,Ctrl+u
使用主面板上方點點點,常用有標簽及注釋