Vra

Dit dink ek is wat verband hou met my gebruik van die nlog C ++ API (en my vraag oor die nlog forum is hier ); die doel van my vra hierdie vraag hier is om 'n wyer gehoor te kry om my probleem en miskien ook 'n paar meer algemene idees agter mislukking die VB6 IDE se te bou in my spesifieke scenario.

Kortliks, die probleem wat ek het, is dat ek sukkel om die bou van VB6 komponente wat onbeheerde C ++ komponente wat oproepe na se nlog C \ C ++ API (wat gedefinieer word in NLogC.DLL) het verwys. Die bou probleme nie plaasvind tydens kompilering, is hulle voorkom wanneer die binêre gebou word wat daarop dui vir my dat dit 'n soort van tipe linkerkant probleem? Nie genoeg oor hoe VB6 binaries geproduseer om te sê weet. Die VB6 binêre geproduseer word, maar dit is beskadig en ineenstortings kort nadat dit vir drie maande.

Het iemand het 'n soortgelyke ervaring met VB6 (hoef nie te wees wat verband hou met nlog of C ++)?

wysig: Dankie vir al die antwoorde op hierdie eerder onduidelik probleem. Nog geen vordering ongelukkig; my bevindings, want ek gepos hierdie:

  1. 'opstel' die saamstel opsies blyk nie help in hierdie probleem.
  2. 'n verwysing na die nlog enabled C ++ komponent Voeg uit 'n "leeg" VB6 projek nie crash dit of laat vreemde bou probleme. Dit is dus nie 'n "inheemse" VB6 kwessie, moontlik 'n probleem met die interaksie tussen nlog en die verskillende komponente en 3 biblioteke partytjie wat gebruik word deur ander gekla komponente?
  3. Wat C ++ roeping konvensies: die-nlog enabled C ++ komponent is - sover ek kan sien - voldoen aan hierdie konvensies en inderdaad werk goed wanneer verwys deur VB6 solank dit nie maak enige nlog API oproepe. Nie seker of die nlogc.DLL self is VB6 voldoen, maar ek sou gedink het dat dit nie wesenlik is nie, aangesien die API oproepe word gemaak van die C ++ komponent; VB6 moet nie weet of omgee wat die komponent C ++ is verwysings (dit is so ver as my verstand op hierdie gaan ...)

edit2: Ek moet ook daarop let dat die fout boodskap wat tydens die bou is: ". Foute tydens vrag U word verwys na" xxx "vir meer inligting". Toe ek bring die log lêer, alles wat daar is in daar is: "Kan beheer xxx nie laai nie". Dis interessant dat alle verwysings na daardie spesifieke beheer verdwyn uit daardie spesifieke projek lei tot Stel foute as ek probeer om weer op te bou.

Was dit nuttig?

Oplossing

Het jy rondom die probleem deur gebruik te maak van NLog se COM koppelvlak (NLog.ComInterop.DLL) van my onbeheerde C ++ kode. Nie so maklik om te doen as die C \ C ++ API maar ten minste is dit nie my VB6 komponente crash.

Ander wenke

Ek wil probeer opstel sommige van die Stel opsies gevind in die Project , Eienskappe spyskaart, Stel paneel om te sien of hulle enige addisionele wenke gee oor wat verkeerd gaan.

As jy byvoorbeeld die uitvoerbare om saam te stel p-kode in plaas van inheemse kode is dit nog crash op opstart.

Wat foutboodskap kry jy as jy jou saamgestel binêre loop?

Ek twyfel of die samesteller / linkerkant is die probleem: projek verwysings in 'n VB6 projek is nie gekoppel in die finale uitvoerbare. 'N Projek verwysing in VB6 is eintlik 'n verwysing na 'n tipe COM biblioteek (wat mag of nie mag nie ingesluit word in 'n DLL of ander binêre lêer tipe). Projek verwysings in die eerste plek dien twee doeleindes:

  1. Die IDE uittreksels tik inligting uit die gekla tipe biblioteke wat dit dan vertoon in die Object Browser (en in die IntelliSense drop-down)

  2. By Stel-time, die samesteller uittreksels van die tipe inligting wat gestoor word in die gekla biblioteke, insluitend die CLSID van elke klas wat jy instansieer, en ingesluit hierdie data in die uitvoerbare. Dit laat jou uitvoerbare om gevalle van klasse in die biblioteke wat jy gekla skep.

Let daarop dat die saamgestel binêre nie verwys na enige kode in die gekla biblioteke, en dit nie eens die lêername van die gekla biblioteke bevat. Die finale uitvoerbare bevat net 'n ander soort inligting die CLSID's en dat dit nodig het om COM voorwerpe instansieer by run-time.

Dit is baie meer waarskynlik dat die probleem is met NLog, of met hoe jy dit doen 'n beroep van jou kode, eerder as iets verkeerd gegaan in die VB6 Stel proses.

As jy dink dat dit dalk 'n linker probleem wees, moet hierdie dit crash op dieselfde manier:

  1. 'n nuwe standaard projek (van enige aard)
  2. voeg 'n nuwe module en kopieer die "verklaar" -statements daarin
  3. Stel

As dit nie crash dit is iets anders.

Dit sal help om 'n presiese beskrywing van die fout of 'n kiekie van wat aangaan.

Een ding om te kyk is waar NLogC.DLL of die C ++ DLL jy gebou het die korrekte roeping konvensie omskryf. Basies wat jy kan nie die DLL funksie name verminkte of gebruik niks anders as die STDCALL roeping konvensie. As die C ++ DLL is nie geskep met die twee dinge in gedagte dan sal dit nie werk met VB6.

MSDN artikel op Oproep konvensie.

"Kan beheer xxx nie laai nie" foute kan veroorsaak word deur .oca lêers wat geskep is uit 'n ander weergawe van 'n OCX as wat tans gebruik word. As dit die geval is, die verwydering van die .oca lêers help.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top