002
22.06.2005, 10:35 Uhr
~xleave
Gast
|
Ja danke für den Tip!
Ich habe den Code auch schon mal fertig gemacht nur dann bemerkt, dass die <string> ja für C++ ist. Da ich den Code aber als Treiber compile, muss ich einen speziellen C compiler von MS nutzen. Also leider keine std::string klasse verfügbar. Hast du vielleicht noch nen anderen Tip?
Ich hab hier auch mal den Source. Konnte es wie gesagt auch leider noch nicht testen. Macht das so Sinn?
C++: |
BOOL WINAPI LangMonWritePort( IN HANDLE hPort, IN LPBYTE pBuffer, IN DWORD cbBuf, IN LPDWORD pcbWritten ) { PINIPORT pIniPort = (PINIPORT)((INIPORT *)hPort); BOOL ret = FALSE; LPBYTE pBufferTemp = NULL; string strBufferTemp = "", strBufferTemp2 = ""; int pos = 0, pos2 = 0;
strBufferTemp = pBuffer;
if(!bDocPrologSaved) {
pos = strBufferTemp.find("%%Page:",0);
if(pos != -1) { // nicht gefunden, also den ganzen string dranhaengen strPrologBuffer.append(strBufferTemp); } else { // nur bis zur gefundenen Position-1 pos = pos - 1 strPrologBuffer.append(strBufferTemp.substr(0,pos)); bDocPrologSaved = TRUE; } }
if(bDocPrologSaved) { // Prolog schon gefunden und gespeichert. Also die Seiten rausknallen
if(!bDocInPage) { // erst nach %%Page: suchen, von der Posi dann wegspeichern // bis %%PageTrailer gefunden
pos = strBufferTemp.find("%%Page:",0);
if(pos != -1) { bDocInPage = TRUE; } }
if(bDocInPage) { // wir haben den anfang noch im buffer, wir suchen noch %%PageTrailer
pos2 = strBufferTemp.find("%%PageTrailer",0);
if(pos2 != -1) { // alles klar, nun ist auch PageTrailer da, seite kann rausgehen strBufferTemp2 = strPrologBuffer + strBufferTemp.substr(pos, pos2) + strPageFooter;
ret = (*pIniPort->fn.pfnWritePort)(pIniPort->hPort, strBufferTemp2.c_str, strBufferTemp2.size(), pcbWritten); bDocInPage = FALSE; } else { // endposition noch nicht da, erst wegspeichern und nächste mal schauen strPageBuffer.append(strBufferTemp.substr(pos, strBufferTemp.size()); ret = 1; } } }
/* ret = (*pIniPort->fn.pfnWritePort)(pIniPort->hPort, pBuffer, cbBuf, pcbWritten); */ if ( ret ) { pIniPort->status &= ~PP_WRITE_ERROR; } else { pIniPort->status |= PP_WRITE_ERROR; }
return ret; }
|
|