diff --git a/modern-c++/README.md b/modern-c++/README.md new file mode 100644 index 0000000..49fb2e4 --- /dev/null +++ b/modern-c++/README.md @@ -0,0 +1,47 @@ +# Guide to modern C++ + +- Essentials of Modern C++ Style [CppCon 2014](https://www.youtube.com/watch?v=xnqTKD8uD64&t=2304s) + +- [Style Guides](https://lefticus.gitbooks.io/cpp-best-practices/content/03-Style.html) + +- [Herb Stutter's style](https://herbsutter.com/elements-of-modern-c-style/) +- [Bjarne Stroustrup's C++ Style](https://www.stroustrup.com/bs_faq2.html) + +## C++20 +- Error : + - C2664 - cannot convert ... 'const[4] to char*' + - C2132 expression didnot evalute to a constant +```C++ +void myFn(char* data) +{ + std::cout << data; + return; +} + +int main() +{ + myFn("ABC"); ==> error + myFn(const_cast("ABC")); ==> OK + std::cout << "Hello World!\n"; +} + +constexpr struct stIniEnumToFilenameMap LogNameMap[] = +{ + {CFileLocation::DEBUG_LOG, const_cast("Dbg.log")}, + {CFileLocation::DEBUG_TIMING_LOG, const_cast("DbgTiming.log"}, + {CFileLocation::GUIEVENT_LOG, const_cast("GUIEventLog.log"}, +}; +``` + +- range for loop `for each()` +```C++ + +for each (auto x in items){} ==> error + +for (auto x : items) {} ==> OK +``` + +- Error: C2440 'initializing': cannot convert from 'ATL::CA2CA' to 'std::basic_string,std::allocator>' +```C++ +std::string strModelName = hardwareIniMotionCard.GetString(osKey.str().c_str(), "Error", FALSE).GetString(); ==> OK - use CString().GetString() +``` diff --git a/visualstudio/README.md b/visualstudio/README.md new file mode 100644 index 0000000..3f81bb7 --- /dev/null +++ b/visualstudio/README.md @@ -0,0 +1,4 @@ +# Visual Studio Information + +- [Troubleshooting](TroubleshootingGuide.md) +- [] diff --git a/visualstudio/TroubleshootingGuide.md b/visualstudio/TroubleshootingGuide.md new file mode 100644 index 0000000..87a5cfa --- /dev/null +++ b/visualstudio/TroubleshootingGuide.md @@ -0,0 +1,19 @@ +# Issues + +## heap debug error +- Symptom : Calling DLL function with std::string parameter / return value, causing heap debug error upon return +- Cause: The caller DLL must compile using the same `[Code Generation]` - `[Runtime Library]` flag. eg: `/MDd` Multi-threaded Debug DLL +- Remedy: Update the flag accordingly + +## Compile erro on Simple console project consuming MFC related DLL +- Symptom : Compile Error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] +- Cause : Default console project for `Advance`->`Use of MFC` is `Use Standard Windows Libraries` +- Remedy: Switch setting to `Use MFC in a Shared DLL` + +## Compile error for string parameters +- Symptom: Unable to match LPCSTR parameters / arguments +- Cause: `Advanced`->`Character Set` Setting mismatch. Default VS2022 project is using `Unicode Character set`. +- Remedy: Change to `Multi-byte Character Set` if original DLL is using MBCS Character Set + +## Database open fail on 64-bit (C#) +- Symptom: \ No newline at end of file diff --git a/visualstudio/entityFramework.md b/visualstudio/entityFramework.md new file mode 100644 index 0000000..783a503 --- /dev/null +++ b/visualstudio/entityFramework.md @@ -0,0 +1,75 @@ +# Entity Framework Core + +- As of 2022, mdb entity ONLY support EF Core 3.x +- [EntityFrameworkCore.Jet](https://github.com/bubibubi/EntityFrameworkCore.Jet) +- [Tutorial](https://www.entityframeworktutorial.net/efcore/entity-framework-core.aspx) +- [EF Core best practice (Youtube)](https://www.youtube.com/watch?v=qkJ9keBmQWo&t=7122s) + +## Code First Approach +- Create the code for DbContext and models +- Run the migration script to generate the db tables +- [Tutorial](https://www.yogihosting.com/code-first-entity-framework-core/) + +```PM +PM> add-migration InitialDb +PM> update-database +PM> remove-migration +PM> Drop-Database +PM> script-migration +``` + +## Database First Approach (Reverse Engineering) +- Note: For mdb, this only work with Jet.OleDB Provider +- Generate DbContext & model from database +- [Tutorial] (https://github-wiki-see.page/m/bubibubi/EntityFrameworkCore.Jet/wiki/Using-Entity-Framework-Core-with-Jet-in-Traditional-.Net-Applications) +- Nuget package + - Microsoft.EntityFrameworkCore (3.1.31) + - EntityFrameworkCore.Jet.OleDb (3.1.1) + - Microsoft.EntityFrameworkCore.Tools (3.1.31) + +```PM +PM> Scaffold-DbContext "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\MitLanguage.mdb;" EntityFrameworkCore.Jet -OutputDir Models -DataAnnotations -Force + +``` + +## Connection String +- [ConnectionString](https://www.connectionstrings.com/) + +- Using OleDb (EntityFrameworkCore.Jet.OleDb) + - x64 : `Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\myFolder\\MitLanguage.mdb;` + - x86 : `Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Machine\\Database\\MitMc.mdb;` + +- Using ODBC (EntityFrameworkCore.Jet.Odbc) + - x64 : `Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq = C:\\myFolder\\MitCustom.mdb; Exclusive=1; Uid = Admin; Pwd =;` + - x86 : `Driver={Microsoft Access Driver (*.mdb)}; Dbq = C:\\myFolder\\MitCustom.mdb; Exclusive=1; Uid = Admin; Pwd =;` + - For x86, use `ODBC Data Source (32-bit)` to add the UserDSN driver for 32-bit platform + +## Sample Query + +```C# +using EFCoreTest.Models; +using System.Text.Json; + +using (var db = new CustomContext()) +{ + ReelAutoChanger? reelAutoChanger = db.ReelAutoChanger.FirstOrDefault(); + string jsonString = JsonSerializer.Serialize(reelAutoChanger); + Console.WriteLine(jsonString); + Console.ReadKey(); +} + +using (var db = new MachineContext()) +{ + List motorProfiles = db.MotorProfile.ToList(); + //IQueryable motorProfiles = db.MotorProfile.FromSqlRaw("Select * from MotorProfile"); + //var emp = context.Employee.FromSqlRaw("Select * from Employee").OrderBy(x => x.Name).ToList(); + string jsonString = JsonSerializer.Serialize(motorProfiles); + Console.WriteLine(jsonString); + Console.ReadKey(); + + List motors = db.Motor.Where(b => b.ModuleName == "PnP").ToList(); + jsonString = JsonSerializer.Serialize(motors); + Console.WriteLine(jsonString); + Console.ReadKey(); +} +``` \ No newline at end of file