这两天,接手别人的一个VC程序,要求在中文,英文,繁体系统下都能正常运行,并且在不同系统下显示不同的语言。
最近就遇到一个很棘手的问题,和之前在英文系统下的差不多,只是这次更离谱,上次是英文系统下的默认编码导致取中文首拼错误;
现在是在繁体系统下,开启工具就会中断异常,报堆栈不平衡,DLL所致。
经多次跟踪,找到时 LeaveCriticalSection 函数这里,跳出的异常中断。
此处的代码,大致为下面这种形式(下面为转载的):
用LCMapString实现GB2312繁体到简体的转化
char szText [256] = "" ;
WORD wLanguageID = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) ;
LCID Locale = MAKELCID( wLanguageID, SORT_CHINESE_PRC ) ;
LCMapString( Locale, LCMAP_SIMPLIFIED_CHINESE, "測試", -1, szText, 256 ) ;
后来找了很多地方,有网上的资料说是要设置多线程编译:
project->settings,选择C/C++,CateGory选择Code Generation,下面的Use run-time library选择多线程,再编译运行试试看。
还是不行。
后来,发现,还是繁体系统下的编码和我中文的操作系统大不一样所致。
于是我把项目丢到繁体操作系统下进行编译,并修改常数参量(很重要),即可正常在中文,英文,繁体三种操作系统下正常运行了。
分享到:
相关推荐
DEPHIC考题 应用开发模拟题(A 卷) 单选: 1. Windows API 提供的多线程同步技术不包括: () A、临界区(Critical Section); B、互斥对象(Mutex);... C、LeaveCriticalSection(临界区变量名)。
易语言读写锁模块源码,读写锁模块,进入,退出,读锁,写锁,解锁,InitializeCriticalSection,DeleteCriticalSection,EnterCriticalSection,LeaveCriticalSection
易语言多线程文件搜索源码,多线程文件搜索,搜索文件,启动线程_,FindFirstFileA,FindClose,FindNextFileA,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection,CreateThread,DeleteCriticalSection...
易语言读写锁1.2模块源码,读写锁1.2模块,开始读,结束读,开始写,结束写,InitializeCriticalSection,DeleteCriticalSection,EnterCriticalSection,LeaveCriticalSection,InterlockedIncrement_ByRef,...
易语言文本栈源码,文本栈,IsEmpty,IsFull,Clear,Push,Pop,Remalloc,设置内存增量,GetTop,GetBottom,GetData,进入许可区,离开许可区,InitializeCriticalSection_临界许可,...临界许可,LeaveCriticalSection_
void Unlock() {LeaveCriticalSection(&m_Lock);} DWORD GetNumInputDevices() {return 1;} DWORD GetNumOutputDevices() {return 1;} DWORD GetNumMixerDevices() {return 1;} DeviceContext *...
代码中的临界区变量(cs)就可以看作是变量s的锁,当函数EnterCriticalSection返回时,当前线程就获得了这把锁,之后就是对变量的...访问完成后,调用LeaveCriticalSection表示释放这把锁,允许其他线程继续使用它。
//LeaveCriticalSection(&gCRITICAL_SECTION_Printf); return 0; } //dispatcher void dispatch() { DWORD Status; timer tm; tm.start(); //srand(time(NULL)); long step = STEP;//ceil(double(TEST/10)); ...
内容索引:VB源码,系统相关,多线程...Call EnterCriticalSection(sect)如果有这句表示在执行这个的同时,其他线程不执行,直到执行了LeaveCriticalSection才可以. 上下表示该处为临界区,如果要对工程全局变量做操作,
不错的ftp服务器源码,界面很不错。 //工作者线程处理函数 UINT ProcessTreadIO(LPVOID lpParameter) { DWORD dwFlags; LPSOCKET_INF pSI; DWORD dwBytesTransferred;... LeaveCriticalSection(&g_cs); continue;
InterlockedExchange InterlockedIncrement LeaveCriticalSection OpenEvent OpenMutex OpenProcess OpenSemaphore PulseEvent ReleaseMutex ReleaseSemaphore ResetEvent ResumeThread ...
EnterCriticalSection ::DeleteCriticalSection ::EnterCriticalSection ::LeaveCriticalSection此时,打印出来的数字就相等了。 具体代码如下: #include stdafx.h #include <Windows> DWORD g_cnt1; DWORD g_cnt...
在代码完成后用LeaveCriticalSection(lpCriticalSection)来标志临界区的结束。 4、在线程执行完后用DeleteCriticalSection(lpCriticalSection)来清除临界区。这个清除过程必须放在线程执行完后的地方,比如...
在代码完成后用LeaveCriticalSection(lpCriticalSection)来标志临界区的结束。 4、在线程执行完后用DeleteCriticalSection(lpCriticalSection)来清除临界区。这个清除过程必须放在线程执行完后的地方,比如...
LeaveCriticalSection(m_pcs); TRACE(_T("LC %d %s\n") , GetCurrentThreadId() , m_strFunc); } void Lock() { TRACE(_T("EC %d %s\n") , GetCurrentThreadId(), m_strFunc); EnterCriticalSection(m_...
LeaveCriticalSection(log_ThreadLock); end; end; procedure log4write(msg: AnsiString); var strline: AnsiString; begin // 最多每秒重加载一次配置文件 if (Now() - log_initime) > (1/(24*60*60)) ...
#include #include #include #include #include //定义一些常量; //本程序允许的最大临界区数;...#define MAX_BUFFER_NUM 10 ...//定义一个结构,记录在测试文件中指定的每一个线程的参数 ... printf(" \n \nALL Producer...
LeaveCriticalSection(&g_criticalSection); return 0; } void FindNowFile(TCHAR *szPath) { WIN32_FIND_DATA stcFindData = { 0 }; TCHAR szSeach[MAX_PATH] = { 0 }; wsprintf(szSeach, L"%s\\...