[C++]Programma wil niet draaien na compilen

Pagina: 1
Acties:
  • 1.683 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Ik heb een simpel programmaatje dat de parallelle poort uitleest, door middel van een DLL (want onder Win2k kan dat niet direct). Dat programma heb ik gecompiled en gelinkt met die DLL (allemaal met behulp van Borland free commandline tools). Maar het ontstane .exe bestand kan ik niet runnen. Dan zegt windows "parpoort.exe is geen geldige Win32 toepassing". Onder Dos werkt het ook niet: "This program must be ran in Windows" (of iets wat daarop lijkt). Ik heb bij het compilen en bij het linken allerlei parameters geprobeerd, maar het wil niet werken :(. Een testprogrammaatje (zonder DLL's enzo) werkt wel gewoon, zonder parameters bij het compilen. Heeft iemand hier een idee waar dat aan zou kunnen liggen?

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Staat die DLL wel in een toegankelijke plaats zoals C:\WinNT\System32?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Geodan
  • Registratie: Maart 2003
  • Laatst online: 20-06 14:32
project properties -> linking -> dynamic linking uitzetten
project properties -> packages-> build with runtime package uit vinken

dan worden alle benodigde bestanden in het exe bestand gepropt.

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Welke parameters zijn dat voor de commandline tools? Ik heb helaas geen Builder. Ik zal zelf ook nog eens goed naar die parameters kijken (maar ik zit nu op school dus dat wordt vanavond).

Alvast bedankt btw :)

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Geodan schreef op 23 april 2003 @ 13:09:
project properties -> linking -> dynamic linking uitzetten
project properties -> packages-> build with runtime package uit vinken

dan worden alle benodigde bestanden in het exe bestand gepropt.
En op wiens vraag is dit een antwoord? :? Het heeft iig niets van doen met het probleem van de topicstarter... :O

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Hmm als dat niet werkt, weet iemand dan iets wat wel werkt?

Ik heb het trouwens nog niet geprobeerd...

Acties:
  • 0 Henk 'm!

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Krankenstein schreef op 23 April 2003 @ 13:14:
Welke parameters zijn dat voor de commandline tools? Ik heb helaas geen Builder. Ik zal zelf ook nog eens goed naar die parameters kijken (maar ik zit nu op school dus dat wordt vanavond).

Alvast bedankt btw :)
Op de site van Borland kun je een gratis trial van Borland C++ Builder downloaden. Op deze manier heb je iig 60 dagen WEL C++ Builder...
edit:
Dan heb ik gelijk een mooie site voor je waarmee je geen DLLs hoeft te gebruiken om com-communicatie te realiseren: http://w ww.traverse.com/people/poinsett/bcbcomm.html
Greetz, B-Man


Sorry...

[ Voor 3% gewijzigd door PKP B-Man op 23-04-2003 16:23 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Krankenstein schreef op 23 April 2003 @ 15:37:
Hmm als dat niet werkt, weet iemand dan iets wat wel werkt?

Ik heb het trouwens nog niet geprobeerd...
Hoe zittie met mijn vraag over waar die DLL staat? En is die DLL niet toevallig een 16-bit DLL die je in je 32-bit app zit te linken (wat overigens volgens mij zou moeten werken)?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

PKP B-Man schreef op 23 April 2003 @ 15:54:
[...]


Op de site van Borland kun je een gratis trial van Borland C++ Builder downloaden. Op deze manier heb je iig 60 dagen WEL C++ Builder...
Dan heb ik gelijk een mooie site voor je waarmee je geen DLLs hoeft te gebruiken om com-communicatie te realiseren: http://www.traverse.com/people/poinsett/bcbcomm.html

Greetz,
B-Man
De TS probeert de parallelle-poort uit te lezen, niet de seriele poort. Bovendien is het artikel waarmee jij kwam een methode om echt de data te lezen, misschien wil de TS wel gewoon de pin-data weten (wat niet kan met de Win32 API functies)

Bovendien zijn groeten onder replies vrij storend, ook al zijn ze goed bedoeld (dit staat ook in de GoT FAQ)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
curry684 schreef op 23 April 2003 @ 15:59:
[...]

Hoe zittie met mijn vraag over waar die DLL staat? En is die DLL niet toevallig een 16-bit DLL die je in je 32-bit app zit te linken (wat overigens volgens mij zou moeten werken)?
Sorry, dacht dat ik dat erbij had gezet |:(

Die .dll staat in dezelfde dir als de .exe (in mijn geval is dat d:\develop\parpoort\ )

En ik wil inderdaad gewoon de pinnen uitlezen en low-level de parallelle poort aansturen om dingen die daaraan hangen aan te sturen (robotje, temperatuur sensor, andere experimentjes). Dat deed ik altijd met QBasic, in Dos of Win98 maar nu ik Win2k heb, kan ik niet anders dan moeilijk doen ;)

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Update: ik heb gezocht naar een optie om statisch te linken maar niet gevonden in de grote lijst parameters.
Is die Builder echt nodig? Dat ding weegt namelijk 170MB en ik heb maar een 128Kb internetlijn. Wat zit er allemaal in die Builder wat het zo groot/goed maakt?

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-09 14:31
De mededeling "parpoort.exe is geen geldige Win32 toepassing" geeft aan dat de PE header onleesbaar/onbruikbara is. Dat is de header die aangeeft welke DLLs er gebruikt worden e.d. . Omdat die niet leesbaar is, zijn de gebruikte DLLs dus irrelevant - Windows kan die niet eens bepalen!

Wat me realistischer lijkt is dat de TS per ongeluk een DLL heeft gebouwd in een poging een DLL te gebruiken. Als je die DLL een naam geeft die eindigt in .EXE, dan is zo'n mededeling te verwachten. Een DLL is nou eenmaal geen Win32 executable.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Als dat zo is, dan zou ik zo niet weten hoe ik het dan wel goed moet doen. Ik zal eens op een rijtje zetten wat ik allemaal heb gedaan:

1 - Programmacode maken: d:\develop\parpoort\parpoort.cpp

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <windows.h>
#include <stdio.h>
#include "winio.h"

int main()
{
  DWORD dwPortVal;
  bool bResult;

  bResult = InitializeWinIo();

  if (bResult)
  {
    GetPortVal(0x378, &dwPortVal, 4);
    ShutdownWinIo();
  }
  else
  {
    printf("Error.\n");
    exit(1);
  }
}


2 - Header file aanpassen (volgens aanwijzingen in een ander topic hier): d:\develop\parpoort\winio.h

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef WINIO_H
#define WINIO_H

#undef WINIO_DLL

#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif

extern "C"
{
  WINIO_API bool _stdcall InitializeWinIo();
  WINIO_API void _stdcall ShutdownWinIo();
  WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
  WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
  WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
  WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
  WINIO_API bool _stdcall RemoveWinIoDriver();
}

extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;

bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();

#endif


3 - winio.sys, winio.vxd en winio.dll in dezelfde dir zetten als de rest (dus ook d:\develop\parpoort\

4 - Een .lib file maken: implib d:\develop\parpoort\winio.dll d:\develop\parpoort\winio.lib

5 - Het programma compileren: bcc32 -c -tWC d:\develop\parpoort\parpoort.cpp

Met in bcc32.cfg:

-I"c:\Borland\BCC55\include"
-L"c:\Borland\BCC55\lib";"d:\develop\parpoort"
-n"d:\develop\parpoort"


6 - Het programma linken: ilink32 -ap d:\develop\parpoort\parpoort.obj, d:\develop\parpoort\parpoort.exe, d:\develop\parpoort\winio.lib

Met als resultaat een .exe bestand. Verder heb ik ook nog wat andere parameters gebruikt bij bcc32 en ilink32 maar dat hielp niets. Volgens mij heb ik dit allemaal wel goed gedaan.

Wil iemand de files anders eens met Borland Builder of Visual C++ compilen om te zien of dat wel werkt? Ik heb namelijk geen idee wat ik er nog meer aan kan doen.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

MSalters schreef op 23 April 2003 @ 20:49:
De mededeling "parpoort.exe is geen geldige Win32 toepassing" geeft aan dat de PE header onleesbaar/onbruikbara is. Dat is de header die aangeeft welke DLLs er gebruikt worden e.d. . Omdat die niet leesbaar is, zijn de gebruikte DLLs dus irrelevant - Windows kan die niet eens bepalen!

Wat me realistischer lijkt is dat de TS per ongeluk een DLL heeft gebouwd in een poging een DLL te gebruiken. Als je die DLL een naam geeft die eindigt in .EXE, dan is zo'n mededeling te verwachten. Een DLL is nou eenmaal geen Win32 executable.
Klopt ik zat vanmiddag niet na te denken, kmoet geen Win32 vragen gaan beantwoorden terwijl ik op VAX/VMS (:r :r :r) zit te coden :)

DLL niet vinden was zo snel het enige dat ik kon bedenken maar dat geeft onder alle Windozen die ik ken gewoon 'Dynamic Link Library pietje.dll could not be found in C:\WinNT;etc.'. Dus ik vonnut ook al onwaarschijnlijk ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
Als je effe alles op een siteje zet wil ik morgen (Donderdag) wel effe checken wat ie doet op VC++, waarom je header files zou moeten gaan aanpassen van een lib die je waarschijnlijk van ergens anders hebt is me een beetje een raadsel...

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Dat die header aangepast moest worden stond in de gebruiksaanwijzing van WinIo (let wel: ik == newbie). Maar enfin...

Bestandjes zijn hier te vinden: http://members.chello.nl/j.enklaar/parpoort.zip
Die winio.lib moet je denk ik opnieuw aanmaken voor een andere compiler. Weet dat niet precies eigenlijk ;)

Succes in ieder geval. Ik hoop dat het lukt. Als het goed is zou het programmatje een getal moeten outputten. Dat is dan de waarde van adres 0x378.

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Ik heb nu Borland C++ Builder gedownload. Vervolgens heb ik de parpoort.cpp en winio.lib in 1 project gestopt, maar hij geeft de volgende errors bij compilen:

[Linker Error] Unresolved external 'InitializeWinIo' referenced from D:\DEVELOP\PARPOORT\PARPOORT.OBJ
[Linker Error] Unresolved external 'GetPortVal' referenced from D:\DEVELOP\PARPOORT\PARPOORT.OBJ
[Linker Error] Unresolved external 'ShutdownWinIo' referenced from D:\DEVELOP\PARPOORT\PARPOORT.OBJ

Dat deed 'ie ook als ik bcc32 vanaf de commandline runde (en dan zonder -c zodat die de linker zelf aanroept). Is het niet genoeg om de .lib toe te voegen aan je project? Zo nee, hoe moet ik het dan doen?

*zucht* Ik wordt er helemaal moedeloos van. Zit verdomme al een week met dit stomme proggie te klooien :(
(moest er even uit ;) )

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Check eens in die lib of de exports er wel instaan (en in een verwacht formaat, denk aan underscores).

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Hoe check ik dat? Ik heb de .lib met notepad geopend maar dat levert nix op (alleen vage tekens ;) ). In Borland C++ Builder kan ik die .lib niet openen.

Ik kreeg net trouwens een idee: Bij WinIo is de source bijgeleverd. Kan ik die niet aan mn project toevoegen en apart compilen? Of heeft dat geen zin? Ik neem aan dat er dan wel een en ander veranderd moet worden in die header file. Is dat te doen of is het vragen om meer problemen?

Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
Krankenstein schreef op 25 april 2003 @ 23:38:
Hoe check ik dat? Ik heb de .lib met notepad geopend maar dat levert nix op (alleen vage tekens ;) ). In Borland C++ Builder kan ik die .lib niet openen.

Ik kreeg net trouwens een idee: Bij WinIo is de source bijgeleverd. Kan ik die niet aan mn project toevoegen en apart compilen? Of heeft dat geen zin? Ik neem aan dat er dan wel een en ander veranderd moet worden in die header file. Is dat te doen of is het vragen om meer problemen?
'Dependency Walker' onder VS doet de truuk alsik die lib open krijg is niets en de link error (wat jij niet eens doet denk ik :)
code:
1
2
3
4
5
6
parpoort.cpp
Linking...
winio.lib : fatal error LNK1136: invalid or corrupt file
Error executing link.exe.

testje.exe - 1 error(s), 0 warning(s)


dit can te maken hebben dat ie voor een verkeerd platform werd gemaakt maar:

uit de walker blijkt dat er niets is gedeclareerd

zoeken naar een nieuwere winio.lib dus

ps: de dll lijkt me wel in orde

[ Voor 3% gewijzigd door hobbit_be op 26-04-2003 00:57 ]


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-09 14:31
De underscores zijn kermerkend voor C name mangling; dat komt dus door de extern "C" in de header. Dat gaat dus fout als die functies helemaal niet extern "C" maar extern "C++" zijn. Borland moet een tool hebben die aangeeft wat de contents zijn van een .DLL, danwel de .LIB die daaruit komt.
Probeer "ilink32 /?" eens, of /help, etc.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
Krankenstein:

http://www.internals.com/

download latest version en kijk naar het example onder 'c' werkt fine op mijn bakkie

kwas vergeten dat dependency alleen bij dll/vxd/sys werkt...

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Ik had al de nieuwste versie van internals.com en ik heb ook naar dat voorbeeld geken hoor :).

extern "c" in extern "c++" veranderen hielp helaas niets. Ik heb trouwens ook al naar de syntax van ilink32 gekeken, en ik weet hoe die eruit hoort te zien. Ik denk dat het probleem daar ook niet in zit.

Maar hobbit_be: heb je voor het compilen een eigen .lib aangemaakt? Want die van mij (door Borland (implib) gemaakt doet het waarschijnlijk niet in andere compilers.

edit: Net op internals.com gezien dat je problemen kan omzeilen door de functies LoadLibrary() en GetProcAdress() te gebruiken. Kan iemand een codevoorbeeldje geven? Want ik snap nog niet echt hoe dat nou allemaal werkt. Ik krijg namelijk alleen maar informatie over het gebruik van die functies in Windows apps en die hebben een wat andere opbouw dan een simpele console app volgens mij (het ziet er in ieder geval anders uit).

Dus stel dat ik uit de dll "winio.dll" de functie "InitializeWinIo()" wil extracten en gebruiken in mn proggie. Hoe zou dat er dan uit komen te zien?

[ Voor 40% gewijzigd door Krankenstein op 26-04-2003 02:47 ]


Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
Als ik het zo lees vraag ik me af of het wel aan source of libs of dll's of weet ik wat ligt.
Als ik mezelf de vraag stel "welke file geeft onder dos aan dat het een windows programma is en onder windows dat het geen geldige windows toepassing is?" dan kan ik maar een ding bedenken, het is een windows 3.11 file!?
Dan ga ik er wel vanuit dat de windows versie van de TS dus te nieuw is voor een 3.11 file en deze niet meer ondersteund?
Ik ga er wel vanuit dat de compiler goede headers geeft voor welk formaat die dan ook bedoelt is.
Of vraag ik me nu iets heel raars af?

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
Krankenstein ik weet echt niet wat jij aan het doen bent: je hoeft helemaal geen lib aan te maken die is er al, ook aan die .h file moet je afblijven, ook die dll ook die vxd en sys.

Gewoon link de lib die erbij zit met je code en presto. (volgens mij lukt dat niet goed bij je, heb helaas geen help buiten VS)

Je kunt (zover ik weet) ook helemaal niets 'uit' een DLL laden.

wel is het zo dat als je de lib niet wil gebruiken (daar doe jij toch echt wel iets verkeerd hoor) dat je rechstreeks de DLL kunt laden (maar dat doet de Lib nout net voor jouw :)

Voor een voorbeeldje kun je toch maar best effe googlen - moeilijk is het niet of nog beter
gebruik de online MSDN (mocht je de gratis April versie nog niet hebben gedowned :) ) met die keywords

Kun jij het example doen werken ? if not dan zit het aan wat je doet niet aan code...

PiepPiep: nee ik heb alles hier ook en het zijn gewoon win32 Dll's voor NT/XP

edit:

effe crash course C/++ een lib is een stukje code dat iemand al heeft gemaakt als je ermee linkt gaat ie gewoon die code erbij zetten. die .h file bepaald gewoon wat er instaat zodat de rest van de code gewoon call's kan doen zonder de weten waar het allemaal zit (dat doet de linker). Die WinIO lib heeft dus alle fucnties die in de dll staan alleen gata ie de dll loaden als dat nog niet zo zou zijn maar voor de rest gaat ie gewoon als de LoadLibrary stuff doen...

[ Voor 28% gewijzigd door hobbit_be op 26-04-2003 12:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Krankenstein schreef op 23 april 2003 @ 12:05:
Maar het ontstane .exe bestand kan ik niet runnen. Dan zegt windows "parpoort.exe is geen geldige Win32 toepassing". Onder Dos werkt het ook niet: "This program must be ran in Windows" (of iets wat daarop lijkt). Ik heb bij het compilen en bij het linken allerlei parameters geprobeerd, maar het wil niet werken :(. Een testprogrammaatje (zonder DLL's enzo) werkt wel gewoon, zonder parameters bij het compilen. Heeft iemand hier een idee waar dat aan zou kunnen liggen?
Wellicht staat in de PE-header dat deze executable alleen runt op Windows versie x.x of hoger...
code:
1
ilink32 -Vd.d       Specify Windows version

[ Voor 10% gewijzigd door Verwijderd op 26-04-2003 13:07 ]


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-09 14:31
PiepPiep schreef op 26 April 2003 @ 02:50:
Als ik het zo lees vraag ik me af of het wel aan source of libs of dll's of weet ik wat ligt.
Als ik mezelf de vraag stel "welke file geeft onder dos aan dat het een windows programma is en onder windows dat het geen geldige windows toepassing is?" dan kan ik maar een ding bedenken, het is een windows 3.11 file!?
Nee. Een Windows 311 executable draait gewoon onder Win32, dus dat zal nooit het probleem zijn. Bovendien, de DOS check zit voor de PE header. Zolang die OK is zal DOS beweren dat het een Windows file is, ook al is de PE header incorrect.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Uit de handleiding van WinIo:
Using WinIo in a C++ Builder application
In order to use WinIo in a C++ Builder application, you should take the following steps:

1 Place winio.dll, winio.vxd and winio.sys in the directory where your application's executable file resides.
2 Create a winio.lib file by running the IMPLIB utility that is bundled with C++ Builder.
3 Add the generated winio.lib to your project file.

4 Remove the WINIO_API constant from the function declarations in winio.h.
5 Add the "#include "winio.h" statement to your source file.
6 Call InitializeWinIo.
7 Call the library's functions to access I/O ports and physical memory.
8 Call ShutdownWinIo.
Daar heb ik het idee vandaan :).

En als ik probeer te linken met de bijgeleverde .lib krijg ik dit:

code:
1
2
3
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 'D:\DEVELOP\PARPOORT\WINIO.LIB' contains invalid OMF record, type 0x21 (p
ossibly COFF)


En in de FAQ op www.internals.com staat dit:
Q. I'm having difficulties using the WinIo library with C++ Builder.

The problem is revealed during the link phase and is related to the fact that Microsoft and Borland use different file formats (COFF/OMF) for storing object files (including LIBs). This means that you cannot add the LIB files supplied with WinIo to your project and get things to work properly. The solution is to avoid the LIB files by using the LoadLibrary/GetProcAddress APIs to load and execute the functions within WinIo.dll.
Vandaar dat ik mijn eigen .lib aanmaak.

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Net weer wat geprobeerd: een .lib file aanmaken met de implib.exe die bij Borland c++ Builder meegeleverd zat. Die gaf de volgende error maar maakte wel een .lib file:

code:
1
2
Borland Implib Version 3.0.22 Copyright (c) 1991, 2000 Inprise Corporation
Error d:\develop\parpoort\winio.dll: unknown file type


Vaag maar het zou best kunnen dat daar wel de fout in zit. Heeft iemand enig idee wat ik hiermee kan doen? Want als de .dll file niet herkend wordt dan ook geen .lib file en ook geen proggie :(. De implib versie van de freecommandlinetools deed die error trouwens niet.

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
*schopje* :)

Acties:
  • 0 Henk 'm!

  • Krankenstein
  • Registratie: Augustus 2000
  • Laatst online: 06-09 20:06
Bij dezen daag ik de programmeer experts hier uit om voor dit schijnbaar simpele probleem iets in de trand van een oplossing te bedenken :P ;)

M.a.w.: *kick*

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

curry684 schreef op 25 April 2003 @ 11:32:
Check eens in die lib of de exports er wel instaan (en in een verwacht formaat, denk aan underscores).
In relatie hierop en je laatste schop: check eens de coff2omf commandline tool, dus open een command box en typ coff2omf -h

Daarmee kun je je lib converteren naar Borland formaat, en zie je meteen die optie langskomen van de underscore generation :P

Professionele website nodig?

Pagina: 1