//プロジェクト名hantozen001 C++ソースファイルhantozen001.cpp imm32.lib #include #pragma comment(lib, "imm32.lib") static const IID IID_IFELanguage = { 0x019f7152, 0xe6db, 0x11d0, { 0x83, 0xc3, 0x00, 0xc0, 0x4f, 0xdd, 0xb8, 0x2e }}; extern "C" { __declspec(dllexport) char * han_to_zen(char * string01,char * string010); __declspec(dllexport) char * trimhan(char * string01,char * string010); __declspec(dllexport) char * zen_to_han(char * string01,char * string010); __declspec(dllexport) char * trimzen(char * string01,char * string010); __declspec(dllexport) char * hira_to_kata(char * string01,char * string02); __declspec(dllexport) char * hira_to_han(char * string01,char * string02); __declspec(dllexport) char * kata_to_hira(char * string01,char * string02); __declspec(dllexport) char * kanji_to_han(char * string01,char * string02); __declspec(dllexport) char * kanji_to_kana(char * string01,char * string02); //kanji_to_kanaで毎回openとcloseを繰り返さないようにopenとcloseを分けたものすこし速くなる __declspec(dllexport) long openife(void); __declspec(dllexport) char * getife(long ife01,char * string01,char * string02); __declspec(dllexport) void closeife(long ife01); char * han_to_zen(char * string01,char * string010) { int index01; char * index02; int index03,len,n; unsigned char shift01; char string02[256] = ""; char string03[256] = ""; char strhan01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strzen01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strhan02[256] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; char strzen02[256] = " !”#$%&’()*+,−./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}〜"; char strhan03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚"; char strzen03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"; index01=0; index03=0; while (index01<=255) { if(string01[index01] == 0) { break; } shift01=string01[index01]; if (((shift01>= 0x81) && (shift01<=0x9F)) || ((shift01>=0xE0) && (shift01<=0xEF))) { string03[index03]=string01[index01]; string03[index03+1]=string01[index01+1]; string03[index03+2]=0; index01=index01+2; index03=index03+2; } else { string02[0] = string01[index01]; string02[1] = string01[index01+1]; string02[2] = 0; index02=strstr(strhan01,string02); if ((index02!=0) && (string01[index01+1]!=0)) { string03[index03]=strzen01[index02-strhan01]; string03[index03+1]=strzen01[index02-strhan01+1]; string03[index03+2]=0; index01=index01+2; index03=index03+2; } else { index02=strchr(strhan02,string01[index01]); if (index02!=0) { string03[index03]=strzen02[(index02-strhan02)*2]; string03[index03+1]=strzen02[(index02-strhan02)*2+1]; string03[index03+2]=0; index03=index03+2; } else { index02=strchr(strhan03,string01[index01]); if (index02!=0) { string03[index03]=strzen03[(index02-strhan03)*2]; string03[index03+1]=strzen03[(index02-strhan03)*2+1]; string03[index03+2]=0; index03=index03+2; } else { string03[index03]=string01[index01]; string03[index03+1]=0; index03=index03+1; } } index01=index01+1; } } } len=strlen(string010); n=strlen(string03); if (len>=n+1) { strcpy(string010,string03); } else { * string010='\0'; } return string010; } char * trimhan(char * string01,char * string010) { int index01; char * index02; int index03,len,n; unsigned char shift01; char string02[256] = ""; char string03[256] = ""; char strhan01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strzen01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strhan02[256] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; char strzen02[256] = " !”#$%&’()*+,−./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}〜"; char strhan03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚"; char strzen03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"; index01=0; index03=0; while (index01<=255) { if(string01[index01] == 0) { break; } shift01=string01[index01]; if (((shift01>= 0x81) && (shift01<=0x9F)) || ((shift01>=0xE0) && (shift01<=0xEF))) { string03[index03]=string01[index01]; string03[index03+1]=string01[index01+1]; string03[index03+2]=0; index01=index01+2; index03=index03+2; } else { string02[0] = string01[index01]; string02[1] = string01[index01+1]; string02[2] = 0; index02=strstr(strhan01,string02); if ((index02!=0) && (string01[index01+1]!=0)) { // string03[index03]=strzen01[index02-strhan01]; // string03[index03+1]=strzen01[index02-strhan01+1]; // string03[index03+2]=0; index01=index01+2; // index03=index03+2; } else { index02=strchr(strhan02,string01[index01]); if (index02!=0) { // string03[index03]=strzen02[(index02-strhan02)*2]; // string03[index03+1]=strzen02[(index02-strhan02)*2+1]; // string03[index03+2]=0; // index03=index03+2; } else { index02=strchr(strhan03,string01[index01]); if (index02!=0) { // string03[index03]=strzen03[(index02-strhan03)*2]; // string03[index03+1]=strzen03[(index02-strhan03)*2+1]; // string03[index03+2]=0; // index03=index03+2; } else { string03[index03]=string01[index01]; string03[index03+1]=0; index03=index03+1; } } index01=index01+1; } } } len=strlen(string010); n=strlen(string03); if (len>=n+1) { strcpy(string010,string03); } else { * string010='\0'; } return string010; } char * zen_to_han(char * string01,char * string010) { int index01; // char * index02; int index03,len,n; int strc01; int flag01; unsigned char shift01; char string02[256] = ""; char string03[256] = ""; char string04[256] = ""; char strhan01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strzen01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strhan02[256] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; char strzen02[256] = " !”#$%&’()*+,−./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}〜"; char strhan03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚"; char strzen03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"; index01=0; index03=0; while (index01<=255) { if(string01[index01] == 0) { break; } shift01=string01[index01]; if (((shift01>= 0x81) && (shift01<=0x9F)) || ((shift01>=0xE0) && (shift01<=0xEF))) { string02[0] = string01[index01]; string02[1] = string01[index01+1]; string02[2] = 0; strc01=0; flag01=0; while (strc01<=255) { if(strzen01[strc01] == 0) { break; } string04[0] = strzen01[strc01]; string04[1] = strzen01[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen01,string02); if (flag01!=0) { string03[index03]=strhan01[strc01]; string03[index03+1]=strhan01[strc01+1]; string03[index03+2]=0; index01=index01+2; index03=index03+2; } else { strc01=0; flag01=0; while (strc01<=255) { if(strzen02[strc01] == 0) { break; } string04[0] = strzen02[strc01]; string04[1] = strzen02[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen02,string02); if (flag01!=0) { string03[index03]=strhan02[strc01/2]; string03[index03+1]=0; index01=index01+2; index03=index03+1; } else { strc01=0; flag01=0; while (strc01<=255) { if(strzen03[strc01] == 0) { break; } string04[0] = strzen03[strc01]; string04[1] = strzen03[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen03,string02); if (flag01!=0) { string03[index03]=strhan03[strc01/2]; string03[index03+1]=0; index01=index01+2; index03=index03+1; } else { string03[index03]=string01[index01]; string03[index03+1]=string01[index01+1]; string03[index03+2]=0; index01=index01+2; index03=index03+2; } } } } else { string03[index03]=string01[index01]; string03[index03+1]=0; index01=index01+1; index03=index03+1; } } len=strlen(string010); n=strlen(string03); if (len>=n+1) { strcpy(string010,string03); } else { * string010='\0'; } return string010; } char * trimzen(char * string01,char * string010) { int index01; // char * index02; int index03,len,n; int strc01; int flag01; unsigned char shift01; char string02[256] = ""; char string03[256] = ""; char string04[256] = ""; char strhan01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strzen01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strhan02[256] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; char strzen02[256] = " !”#$%&’()*+,−./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}〜"; char strhan03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚"; char strzen03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"; index01=0; index03=0; while (index01<=255) { if(string01[index01] == 0) { break; } shift01=string01[index01]; if (((shift01>= 0x81) && (shift01<=0x9F)) || ((shift01>=0xE0) && (shift01<=0xEF))) { string02[0] = string01[index01]; string02[1] = string01[index01+1]; string02[2] = 0; strc01=0; flag01=0; while (strc01<=255) { if(strzen01[strc01] == 0) { break; } string04[0] = strzen01[strc01]; string04[1] = strzen01[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen01,string02); if (flag01!=0) { // string03[index03]=strhan01[strc01]; // string03[index03+1]=strhan01[strc01+1]; // string03[index03+2]=0; index01=index01+2; // index03=index03+2; } else { strc01=0; flag01=0; while (strc01<=255) { if(strzen02[strc01] == 0) { break; } string04[0] = strzen02[strc01]; string04[1] = strzen02[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen02,string02); if (flag01!=0) { // string03[index03]=strhan02[strc01/2]; // string03[index03+1]=0; index01=index01+2; // index03=index03+1; } else { strc01=0; flag01=0; while (strc01<=255) { if(strzen03[strc01] == 0) { break; } string04[0] = strzen03[strc01]; string04[1] = strzen03[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen03,string02); if (flag01!=0) { // string03[index03]=strhan03[strc01/2]; // string03[index03+1]=0; index01=index01+2; // index03=index03+1; } else { // string03[index03]=string01[index01]; // string03[index03+1]=string01[index01+1]; // string03[index03+2]=0; index01=index01+2; // index03=index03+2; } } } } else { string03[index03]=string01[index01]; string03[index03+1]=0; index01=index01+1; index03=index03+1; } } len=strlen(string010); n=strlen(string03); if (len>=n+1) { strcpy(string010,string03); } else { * string010='\0'; } return string010; } char * hira_to_kata(char * string01,char * string02) { char * param1; unsigned int len,n; len=strlen(string01); param1 = (char *)calloc(1,len*2+2); n=LCMapString( GetUserDefaultLCID(), LCMAP_KATAKANA, string01, len, param1, len*2+2); len=strlen(string02); if (len>=n+1 && n>0) { memcpy(string02,param1,n+1); } else { * string02='\0'; } free( param1); return string02; } char * hira_to_han(char * string01,char * string010) { char * param1; unsigned int len,n; len=strlen(string01); param1 = (char *)calloc(1,len*2+2); n=LCMapString( GetUserDefaultLCID(), LCMAP_KATAKANA, string01, len, param1, len*2+2); string01=param1; int index01; // char * index02; int index03; int strc01; int flag01; unsigned char shift01; char string02[256] = ""; char string03[256] = ""; char string04[256] = ""; char strhan01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strzen01[256] = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; char strhan02[256] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; char strzen02[256] = " !”#$%&’()*+,−./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}〜"; char strhan03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚"; char strzen03[256] = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"; index01=0; index03=0; while (index01<=255) { if(string01[index01] == 0) { break; } shift01=string01[index01]; if (((shift01>= 0x81) && (shift01<=0x9F)) || ((shift01>=0xE0) && (shift01<=0xEF))) { string02[0] = string01[index01]; string02[1] = string01[index01+1]; string02[2] = 0; strc01=0; flag01=0; while (strc01<=255) { if(strzen01[strc01] == 0) { break; } string04[0] = strzen01[strc01]; string04[1] = strzen01[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen01,string02); if (flag01!=0) { string03[index03]=strhan01[strc01]; string03[index03+1]=strhan01[strc01+1]; string03[index03+2]=0; index01=index01+2; index03=index03+2; } else { strc01=0; flag01=0; while (strc01<=255) { if(strzen02[strc01] == 0) { break; } string04[0] = strzen02[strc01]; string04[1] = strzen02[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen02,string02); if (flag01!=0) { string03[index03]=strhan02[strc01/2]; string03[index03+1]=0; index01=index01+2; index03=index03+1; } else { strc01=0; flag01=0; while (strc01<=255) { if(strzen03[strc01] == 0) { break; } string04[0] = strzen03[strc01]; string04[1] = strzen03[strc01+1]; string04[2] = 0; if (strcmp(string04,string02)==0) { flag01=1; break; } strc01=strc01+2; } // index02=strstr(strzen03,string02); if (flag01!=0) { string03[index03]=strhan03[strc01/2]; string03[index03+1]=0; index01=index01+2; index03=index03+1; } else { string03[index03]=string01[index01]; string03[index03+1]=string01[index01+1]; string03[index03+2]=0; index01=index01+2; index03=index03+2; } } } } else { string03[index03]=string01[index01]; string03[index03+1]=0; index01=index01+1; index03=index03+1; } } len=strlen(string010); n=strlen(string03); if (len>=n+1) { strcpy(string010,string03); } else { * string010='\0'; } free( param1); return string010; } char * kata_to_hira(char * string01,char * string02) { char * param1; unsigned int len,n; len=strlen(string01); param1 = (char *)calloc(1,len*2+2); n=LCMapString( GetUserDefaultLCID(), LCMAP_HIRAGANA, string01, len, param1, len*2+2); len=strlen(string02); if (len>=n+1 && n>0) { memcpy(string02,param1,n+1); } else { * string02='\0'; } free( param1); return string02; } char * kanji_to_han(char * string01,char * string02) { CANDIDATELIST * param1; char * param2; unsigned int len,n; HWND hWnd=GetForegroundWindow(); HIMC hIMC=ImmGetContext( hWnd ); n=ImmGetConversionList( GetKeyboardLayout(0), hIMC, string01, NULL, 0, GCL_REVERSECONVERSION); if (n<=0) { * string02='\0'; return string02; } param1 = (CANDIDATELIST *)calloc(1,n + 2); ImmGetConversionList( GetKeyboardLayout(0), hIMC, string01, param1, n, GCL_REVERSECONVERSION); param2 = (char*)param1 + param1->dwOffset[0]; len=strlen(string02); n=strlen(param2); if (len>=n+1 && n>0) { memcpy(string02,param2,n+1); } else { * string02='\0'; } free( param1); ImmReleaseContext( hWnd, hIMC ); return string02; } char * kanji_to_kana(char * string01,char * string02) { if (strlen(string01)==0 || strlen(string01)>99) { * string02='\0'; return string02; } CoInitialize(NULL); CLSID clsid; HRESULT hr = CLSIDFromString(L"MSIME.Japan", &clsid); if(FAILED(hr)) { MessageBox(NULL, "CLSIDFromProgID() failed", "Error", 0x10010); CoUninitialize(); * string02='\0'; return string02; } IFELanguage *pIFELanguage; hr = CoCreateInstance(clsid, NULL, CLSCTX_SERVER, IID_IFELanguage, (void **)&pIFELanguage); if(FAILED(hr)) { MessageBox(NULL, "IFELanguage not registered properly", "Error", 0x10010); CoUninitialize(); * string02='\0'; return string02; } if(pIFELanguage->Open() != S_OK) { pIFELanguage->Release(); CoUninitialize(); * string02='\0'; return string02; } DWORD dwCaps; if(pIFELanguage->GetConversionModeCaps(&dwCaps) != S_OK) { pIFELanguage->Close(); pIFELanguage->Release(); CoUninitialize(); * string02='\0'; return string02; } MORRSLT *pmorrslt; unsigned int n = MultiByteToWideChar(CP_ACP, 0, string01, -1, NULL, 0 ); char * param1 = (char *)calloc(1,n*2 + 2); if(!param1) { CoUninitialize(); * string02='\0'; return string02; } MultiByteToWideChar(CP_ACP, 0, string01, -1, (LPWSTR)param1, n+1 ); WCHAR * kanji = (WCHAR *)param1; if(pIFELanguage->GetJMorphResult(FELANG_REQ_REV, FELANG_CMODE_PINYIN | FELANG_CMODE_NOINVISIBLECHAR, wcslen(kanji), kanji, NULL, &pmorrslt) != S_OK) { CoTaskMemFree(pmorrslt); free( param1); pIFELanguage->Close(); pIFELanguage->Release(); CoUninitialize(); * string02='\0'; return string02; } if(!pmorrslt) { CoTaskMemFree(pmorrslt); free( param1); pIFELanguage->Close(); pIFELanguage->Release(); CoUninitialize(); * string02='\0'; return string02; } n = WideCharToMultiByte(CP_ACP, 0, pmorrslt->pwchOutput, pmorrslt->cchOutput, NULL, 0, NULL, NULL); char * param2 = (char *)calloc(1,n + 1); if(!param2) { CoTaskMemFree(pmorrslt); free( param1); pIFELanguage->Close(); pIFELanguage->Release(); CoUninitialize(); * string02='\0'; return string02; } WideCharToMultiByte(CP_ACP, 0, pmorrslt->pwchOutput, pmorrslt->cchOutput, param2, n+1, NULL, NULL); CoTaskMemFree(pmorrslt); free( param1); pIFELanguage->Close(); pIFELanguage->Release(); CoUninitialize(); unsigned int len=strlen(string02); if (len>=n+1 && n>0) { memcpy(string02,param2,n+1); } else { * string02='\0'; } free( param2); return string02; } long openife(void) { CoInitialize(NULL); CLSID clsid; HRESULT hr = CLSIDFromString(L"MSIME.Japan", &clsid); if(FAILED(hr)) { MessageBox(NULL, "CLSIDFromProgID() failed", "Error", 0x10010); return 0; } IFELanguage *pIFELanguage; hr = CoCreateInstance(clsid, NULL, CLSCTX_SERVER, IID_IFELanguage, (void **)&pIFELanguage); if(FAILED(hr)) { MessageBox(NULL, "IFELanguage not registered properly", "Error", 0x10010); return 0; } if(pIFELanguage->Open() != S_OK) { pIFELanguage->Release(); return 0; } DWORD dwCaps; if(pIFELanguage->GetConversionModeCaps(&dwCaps) != S_OK) { pIFELanguage->Close(); pIFELanguage->Release(); return 0; } return (long)pIFELanguage; } char * getife(long ife01,char * string01,char * string02) { if (strlen(string01)==0 || strlen(string01)>99) { * string02='\0'; return string02; } if(!ife01) { * string02='\0'; return string02; } IFELanguage *pIFELanguage = (IFELanguage *)ife01; MORRSLT *pmorrslt; unsigned int n = MultiByteToWideChar(CP_ACP, 0, string01, -1, NULL, 0 ); char * param1 = (char *)calloc(1,n*2 + 2); if(!param1) { * string02='\0'; return string02; } MultiByteToWideChar(CP_ACP, 0, string01, -1, (LPWSTR)param1, n+1 ); WCHAR * kanji = (WCHAR *)param1; if(pIFELanguage->GetJMorphResult(FELANG_REQ_REV, FELANG_CMODE_PINYIN | FELANG_CMODE_NOINVISIBLECHAR, wcslen(kanji), kanji, NULL, &pmorrslt) != S_OK) { CoTaskMemFree(pmorrslt); free( param1); // pIFELanguage->Close(); // pIFELanguage->Release(); * string02='\0'; return string02; } if(!pmorrslt) { CoTaskMemFree(pmorrslt); free( param1); // pIFELanguage->Close(); // pIFELanguage->Release(); * string02='\0'; return string02; } n = WideCharToMultiByte(CP_ACP, 0, pmorrslt->pwchOutput, pmorrslt->cchOutput, NULL, 0, NULL, NULL); char * param2 = (char *)calloc(1,n + 1); if(!param2) { CoTaskMemFree(pmorrslt); free( param1); // pIFELanguage->Close(); // pIFELanguage->Release(); * string02='\0'; return string02; } WideCharToMultiByte(CP_ACP, 0, pmorrslt->pwchOutput, pmorrslt->cchOutput, param2, n+1, NULL, NULL); CoTaskMemFree(pmorrslt); free( param1); // pIFELanguage->Close(); // pIFELanguage->Release(); // CoUninitialize(); unsigned int len=strlen(string02); if (len>=n+1 && n>0) { memcpy(string02,param2,n+1); } else { * string02='\0'; } free( param2); return string02; } void closeife(long ife01) { if(!ife01) { return; } IFELanguage *pIFELanguage = (IFELanguage *)ife01; pIFELanguage->Close(); pIFELanguage->Release(); CoUninitialize(); return; } }