|
DLL을 로딩하여 DLL함수를 사용하고 있습니다.
그런데 DLL함수를 호출하고 나서 다음 라인에서 wsprintf()를 사용하면 프로그램이
중단되거나 이상한 값이 써집니다.
소스를 예를들어 설명하자면...
(//*** 로 된부분이 문제가 발생하는 부분입니다.)
// 제가 만든 함수이고 DLL함수를 이용해서 값을 가져오는 기능을 합니다.
BOOL __fastcall TMainForm::myFunc(HANDLE hCTAPI, String Tag_Name, time_t timet, double rPeriod,
int iCount, int iDisplayMode, int iMilliseconds, float *pData)
{
char sResult[4096];
char sStr[4096];
char sErrorText[4096];
wsprintf(sStr, "ApiTrnGetTable(\"%s\",%d,%d.%03d,%d,%d,%d)", Tag_Name.c_str(),
timet, (int)rPeriod, int(rPeriod*1000)%1000, iCount, iDisplayMode, iMilliseconds);
//
//*** 여기가 DLL함수(pctCicode)를 호출하는 부분입니다. sResult에 값이 들어가는 거죠.
//
rtv = pctCicode( hCTAPI, sStr, 0, 0, sResult, sizeof(sResult), NULL);
//
//*** 여기서 다시 wsprintf로 sStr을 쓸려고 하면 프로그램이 중단되거나
// sStr에 이상한값이 써집니다.
//
wsprintf(sStr, "ApiTableValue(%d)", i);
rtv = pctCicode( hCTAPI, sStr, 0, 0, sResult, sizeof(sResult), NULL);
return TRUE;
}
함수안에 있는 char배열의 크기를 2048정도만 해주면 에러가 발생하고, 4096으로 늘려주면
괜찮습니다. DLL를 사용하면서 메모리가 잘못된거 같은데, 이런 경우는 처음이라
문제가 뭔지 잘 모르겠습니다.
아시는분 계시면 도움 부탁합니다.
|