Showing posts with label C/MFC. Show all posts
Showing posts with label C/MFC. Show all posts

5/30/2018

How to get current directory in window application.

Example source code to get current directory in window application


..
CString CurrentDirectoryToCString()
{
    TCHAR buff[MAX_PATH];
    memset(buff, 0, MAX_PATH);
    ::GetCurrentDirectory(MAX_PATH, buff);
    CString strFolder = buff;

    return strFolder;
}
..

6/19/2017

tip, CString token in MFC

refer to below code.


CString selectedModel;
m_ListBoxOfConnection.GetText(sel, selectedModel);
//selectedModel = "com1,model1,base";

CString comStr;
CString modelStr;
CString optionStr;

AfxExtractSubString(comStr, selectedModel, 0, ',');
AfxExtractSubString(modelStr, selectedModel, 1, ',');
AfxExtractSubString(optionStr, selectedModel, 2, ',');


//then
//comStr = com1
//modelStr = model1
//optionStr = base


Thank you.



1/03/2017

In MFC, File exist check and delete the file, example source code.



If file exist then delete the file, example source code in MFC

< github code >
___

MFC Encode / Decode example souce code



WtoC function code is here
http://study.marearts.com/2017/01/unicode-cstring-convert-to-char.html

And refer to GetMacAddress code
http://study.marearts.com/2017/01/get-mac-address-in-mfc.html

Encode code
//

..

Decode code
//

..

Unicode CString convert to char *

The returned char * will need to be freed after use.


< gist code start >

< gist code end >


#tags
wchar_t, WtoC, WideCharToMultiByte, WideCharToMultiByte

useful site for CString converting


http://www.flounder.com/cstring.htm#Converting%20a%20CString%20to%20an%20integer


Get Mac Address in MFC


GetMacAddress in MFC

Get by using GetAdaptersInfo function
//

..
Get by using ip address
//If localhost -> GetMacAddress(_T("*"));
//if have ip -> GetMacAddress(_T("192.168.1.1"));//

..


1/02/2017

CString to string


..
string CstringToString(CString str)
{
    CT2CA pszConvertedAnsiString(str);
    std::string s(pszConvertedAnsiString);

    return s;
}
..

12/08/2016

convert char* to LPWSTR

refer to below example


char text[] = "something";
wchar_t wtext[20];
mbstowcs(wtext, text, strlen(text)+1);//Plus null
LPWSTR ptr = wtext;

12/07/2016

convert tchar * to char * / char * to tchar*

tchar* -> char*

"Tch" is tchar*
"pStrTch" is char*


TCHAR Tch[MAX_PATH + 1];
int lenOftch = (wcslen(Tch) + 1) * 2;
char * pStrTch = (char*)malloc(sizeof(char)*MAX_PATH);

//tchar* to char*
WideCharToMultiByte(CP_UTF8, 0, Tch, -1, pStrTch, lenOftch, NULL, NULL);
//


char* -> tchar*


char charBuff[]="test";
TCHAR szUniCode[256]={0,};
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, charBuff, strlen(charBuff), szUniCode, 256);

12/01/2016

Create a console window in MFC

Insert code in stdafx.h

#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")

The print result is output.



string to LPCTSTR

Very simple way~


string s;
CString cs(s.c_str()); //< - lpctstr


11/30/2016

Set up VisualStudio to run programs as an administrator



Enter the project properties and change the Configuration Properties -> Linker -> Manifest File -> UAC Execution Level item to requireAdministrator.


5/16/2016

Serial communication(RS232C) source code (for wince and window)

The serial communication code is different for winCE and window.

In particular, Windows ce is attaching colon like 'com1:' an attempt to connect.

This attached code is very useful to start.

But comment is korean.

https://github.com/MareArts/ComThread

There are two folders. one is for wince, second is for window.

This source can be directly applied to the project.

Thank you.



5/11/2016

CString to char*

//CString -> char *
CString str;
str = "hello";
char * chr = LPSTR(LPCTSTR(str));

//char * -> CString
char chr[] = "hello";
CString str;
str.Format("%s", ss);

3/28/2016

error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

If you meet this error message
"error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings"


Add this code first line on the code.
#define _WINSOCK_DEPRECATED_NO_WARNINGS


Then we can avoid.


9/23/2014

C/C++, option parameter / argument parser (using wingetopt.h, wingetopt.c)

This is option parameter parsing example.
When we excute cmd file with option, this paser is parsing each value of options.

ex) facedetection.exe -o B.avi -p 1000 -l A.avi

in source, parameters is parsred by "B.avi", "1000", ""(-l option exist), "A.avi"

see example source code easier understanding.


main.cpp
#include < iostream>
#include < string>
#include "wingetopt.h"

using namespace std;

struct Options 
{
 Options():Number(10),use_A(false),infile(),outfile()
 {}

 int Number;
 bool use_A;
 string infile;
 string outfile;
};

void parse_command_line(int argc, char** argv, Options& o)
{
 int c = -1;
 while( (c = getopt(argc, argv, "lo:p:")) != -1 )
 {
  switch(c)
  {
  case 'l':
   o.use_A = true;
   break;
  case 'o':
   o.outfile = optarg;
   break;
  case 'p':
   o.Number = atoi(optarg);
   break;
  default:
   cout << "error message" << endl;
   exit(1);
  }
 }

 if( optind < argc )
 {
  o.infile = argv[optind];
 }

 cout << "Num : " << o.Number << endl;
 cout << "Input file: " << o.infile << endl;
 cout << "Output file: " << o.outfile << endl;
 cout << "Use A: " << o.use_A << endl;
}

int main(int argc, char** argv)
{
 Options o;
 parse_command_line(argc, argv, o);
 


}
... wingetopt.h
/*
POSIX getopt for Windows

AT&T Public License

Code given out at the 1985 UNIFORUM conference in Dallas.  
*/

#ifdef __GNUC__
#include 
#endif
#ifndef __GNUC__

#ifndef _WINGETOPT_H_
#define _WINGETOPT_H_

#ifdef __cplusplus
extern "C" {
#endif

extern int opterr;
extern int optind;
extern int optopt;
extern char *optarg;
extern int getopt(int argc, char **argv, char *opts);

#ifdef __cplusplus
}
#endif

#endif  /* _GETOPT_H_ */
#endif  /* __GNUC__ */
... wingetopt.c
/*
POSIX getopt for Windows

AT&T Public License

Code given out at the 1985 UNIFORUM conference in Dallas.  
*/

#ifndef __GNUC__

#include "wingetopt.h"
#include < stdio.h>

#define NULL 0
#define EOF (-1)
#define ERR(s, c) if(opterr){\
 char errbuf[2];\
 errbuf[0] = c; errbuf[1] = '\n';\
 fputs(argv[0], stderr);\
 fputs(s, stderr);\
 fputc(c, stderr);}
 //(void) write(2, argv[0], (unsigned)strlen(argv[0]));\
 //(void) write(2, s, (unsigned)strlen(s));\
 //(void) write(2, errbuf, 2);}

int opterr = 1;
int optind = 1;
int optopt;
char *optarg;

int
getopt(argc, argv, opts)
int argc;
char **argv, *opts;
{
 static int sp = 1;
 register int c;
 register char *cp;

 if(sp == 1)
  if(optind >= argc ||
     argv[optind][0] != '-' || argv[optind][1] == '\0')
   return(EOF);
  else if(strcmp(argv[optind], "--") == NULL) {
   optind++;
   return(EOF);
  }
 optopt = c = argv[optind][sp];
 if(c == ':' || (cp=strchr(opts, c)) == NULL) {
  ERR(": illegal option -- ", c);
  if(argv[optind][++sp] == '\0') {
   optind++;
   sp = 1;
  }
  return('?');
 }
 if(*++cp == ':') {
  if(argv[optind][sp+1] != '\0')
   optarg = &argv[optind++][sp+1];
  else if(++optind >= argc) {
   ERR(": option requires an argument -- ", c);
   sp = 1;
   return('?');
  } else
   optarg = argv[optind++];
  sp = 1;
 } else {
  if(argv[optind][++sp] == '\0') {
   sp = 1;
   optind++;
  }
  optarg = NULL;
 }
 return(c);
}

#endif  /* __GNUC__ */

...




one more tip,
If you want to input argument values in the VS tools, you can input in here, -> property -> debug -> command argument
refer to this image~~





12/23/2013

TBB example source code ( parallel_invoke function )

You need TBB lib to run this source code.

Download TBB file, and unzip your propely new folder in your computer.
And copy dll files into windows\system folder.

TBB download url -> https://www.threadingbuildingblocks.org/download

 
 
Set path of TBB incoude, lib location on the Visual studio.
 



This is example source code.
 

/////
#include < stdio.h>
#include < tchar.h>
#include < time.h>
#include < tbb/tbb.h>

#ifdef _DEBUG
#pragma comment(lib, "tbb_debug.lib")
#else
#pragma comment(lib, "tbb.lib");
#endif // _DEBUG

using namespace tbb;

void main()
{
 task_scheduler_init init;

 parallel_invoke(
  []()->void
 {
  ::Sleep(1000);
  ::printf("finish:%d\n", 1000);
 },
  []()->void
 {
  ::Sleep(1000);
  ::printf("finish:%d\n", 10000);
 });

 printf("All work is done \n");

 getchar();
 
}
/////