OldSchoolHack

Register / Login English

unresolved external symbol obwohl die OSH Lib eingebunden ist


icon unresolved external symbol obwohl die OSH Lib eingebunden ist #1

Join Date: Mar 2011

Posts: 20

Hallo,

ich wollte jetzt von meiner Render Classe weg, da ich über den OSH Renderer viel gutes gehört habe.
Jetzt habe ich den Renderer eingebunden und die Lib compiled, jetzt bekomme ich aber immer noch unresolved external symbole, habe die Lib beim Linker eingebunden, die wird auch gefunden, es geben aber der findet wohl die Funktions definitionen nicht findet.

icon #2

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Was für Fehler werden denn angezeigt? Wie hast du die Lib eingebunden?

(Und eventuell hilft es auch beim Verständniss, wenn du deine Sätze nochmal durchliest, bevor du sie hier abschickst.)

__________________

Hallo
icon #3

Join Date: Mar 2011

Posts: 20

Also, ich bekomme diese Fehler.
TEXT Code:
  1. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::EndLines(void)" (?EndLines@RendererDX9@Drawing@OSHGui@@UAEXXZ)".
  2. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::BeginLines(void)" (?BeginLines@RendererDX9@Drawing@OSHGui@@UAEXXZ)".
  3. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual class OSHGui::Drawing::Size const __thiscall OSHGui::Drawing::RendererDX9::GetRenderDimension(void)const " (?GetRenderDimension@RendererDX9@Drawing@OSHGui@@UBE?BVSize@23@XZ)".
  4. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual class std::shared_ptr<class OSHGui::Drawing::IFont> const __thiscall OSHGui::Drawing::RendererDX9::CreateNewFont(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,bool,bool)" (?CreateNewFont@RendererDX9@Drawing@OSHGui@@UAE?BV?$shared_ptr@VIFont@Drawing@OSHGui@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@H_N1@Z)".
  5. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual class std::shared_ptr<class OSHGui::Drawing::ITexture> const __thiscall OSHGui::Drawing::RendererDX9::CreateNewTexture(class OSHGui::Drawing::Size const &,int,class OSHGui::Misc::TimeSpan)" (?CreateNewTexture@RendererDX9@Drawing@OSHGui@@UAE?BV?$shared_ptr@VITexture@Drawing@OSHGui@@@std@@ABVSize@23@HVTimeSpan@Misc@3@@Z)".
  6. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual class std::shared_ptr<class OSHGui::Drawing::ITexture> const __thiscall OSHGui::Drawing::RendererDX9::CreateNewTexture(int,int,int,class OSHGui::Misc::TimeSpan)" (?CreateNewTexture@RendererDX9@Drawing@OSHGui@@UAE?BV?$shared_ptr@VITexture@Drawing@OSHGui@@@std@@HHHVTimeSpan@Misc@3@@Z)".
  7. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual class std::shared_ptr<class OSHGui::Drawing::ITexture> const __thiscall OSHGui::Drawing::RendererDX9::CreateNewTexture(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?CreateNewTexture@RendererDX9@Drawing@OSHGui@@UAE?BV?$shared_ptr@VITexture@Drawing@OSHGui@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@@Z)".
  8. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::PostReset(void)" (?PostReset@RendererDX9@Drawing@OSHGui@@UAEXXZ)".
  9. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::PreReset(void)" (?PreReset@RendererDX9@Drawing@OSHGui@@UAEXXZ)".
  10. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::End(void)" (?End@RendererDX9@Drawing@OSHGui@@UAEXXZ)".
  11. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::Begin(void)" (?Begin@RendererDX9@Drawing@OSHGui@@UAEXXZ)".
  12. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual __thiscall OSHGui::Drawing::RendererDX9::~RendererDX9(void)" (??1RendererDX9@Drawing@OSHGui@@UAE@XZ)".
  13. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall OSHGui::Drawing::RendererDX9::RendererDX9(struct IDirect3DDevice9 *)" (??0RendererDX9@Drawing@OSHGui@@QAE@PAUIDirect3DDevice9@@@Z)".
  14. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::RenderLine(int,int,int,int)" (?RenderLine@RendererDX9@Drawing@OSHGui@@UAEXHHHH@Z)".
  15. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::RenderText(class std::shared_ptr<class OSHGui::Drawing::IFont> const &,int,int,int,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?RenderText@RendererDX9@Drawing@OSHGui@@UAEXABV?$shared_ptr@VIFont@Drawing@OSHGui@@@std@@HHHHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@@Z)".
  16. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::RenderTexture(class std::shared_ptr<class OSHGui::Drawing::ITexture> const &,int,int,int,int)" (?RenderTexture@RendererDX9@Drawing@OSHGui@@UAEXABV?$shared_ptr@VITexture@Drawing@OSHGui@@@std@@HHHH@Z)".
  17. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::FillGradient(int,int,int,int,class OSHGui::Drawing::Color)" (?FillGradient@RendererDX9@Drawing@OSHGui@@UAEXHHHHVColor@23@@Z)".
  18. 1>D3D9Capture.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall OSHGui::Drawing::RendererDX9::Fill(int,int,int,int)" (?Fill@RendererDX9@Drawing@OSHGui@@UAEXHHHH@Z)".

Ich möchte nur die Render Classen nutzen.
Also habe ich die IRender.h und die D3D9Render.h eingebunden, so wie die Lib(OSHLib).
In den Headerdateien sind ja die Classen und die Deklarationen drinnen,der Funktionen, von der Lib sollte er dann ja die Definitionen nehmen, so sollte ja alles gehen, das Problem ist jetzt, das er sagt, dass manche Funktionen nicht aufgelöst sind, dass passiert ja wenn man eine Funktion Deklariert aber nicht Definiert. 
Also schließe ich daraus, das er die Definietionen nicht aus der Lib lesen kann.
Und so habe ich die Lib eingebunden : http://fs1.directupload.net/images/150705/9frp7cbv.png
http://fs1.directupload.net/images/150705/qzzid78h.png
Last edited by KN4CK3R (Sun 5. Jul 2015, 20:28)

Reason: no reason given

icon #4

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Die Dateien der Renderer werden nicht mit in die Lib kompiliert. Die müssten im aktuellen Projekt als Quelldateien eingebunden werden. Das geht dann auch ohne das GUI an sich. (Wenn du die fehlenden Dateien auch als Source hinzufügst.)

__________________

Hallo
icon #5

Join Date: Mar 2011

Posts: 20

Quote from KN4CK3R post
Die Dateien der Renderer werden nicht mit in die Lib kompiliert. Die müssten im aktuellen Projekt als Quelldateien eingebunden werden. Das geht dann auch ohne das GUI an sich. (Wenn du die fehlenden Dateien auch als Source hinzufügst.)
Danke, nur noch ein Problem, ich habe jetzt die D3D11 Effects nen Fehler.
TEXT Code:
  1. 2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028:
  2. The intermediate directory (Release\) contains files shared from another project (Arturs's Cheats.vcxproj).
  3. This can lead to incorrect clean and rebuild behavior.
  4. 2>D3DX11Effects.lib(EffectLoad.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DGetInputSignatureBlob@12".
  5. 2>D3DX11Effects.lib(EffectLoad.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DReflect@16".
  6. 2>E:\Privat\Sources\2.Internal\Bases\MineCore - DirectX Base\Release\MineCore's Cheats Arma 3.dll : fatal error LNK1120: 2 nicht aufgelöste Externe
Last edited by Artur1338 (Fri 10. Jul 2015, 12:30)

Reason: no reason given

icon #6

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Wenn du DX9 benutzt brauchst du die D3D11 Effects aber auch nicht?

__________________

Hallo
icon #7

Join Date: Mar 2011

Posts: 20

Quote from KN4CK3R post
Wenn du DX9 benutzt brauchst du die D3D11 Effects aber auch nicht?
Ich bin ja bei Arma 3 DX11, hab nen Universal Hook, also 9,10,11 wo ich immer den IRenderer als shared_ptr übergebe, da hab ich alles Rendering Hook Zeug in ner Lib, wie ich dann als Object oder wie das heißt in ner Base wo ich nur eine void habe die RenderThread heißt habe, die void habe ich dann davor als external void ... deklariert, der 9ner geht ja aber 11 bekommt der die Effect errors.
Last edited by Artur1338 (Fri 10. Jul 2015, 18:56)

Reason: no reason given

icon #8

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Bekommste den Linkerfehler auch in nem neuen leeren Projekt, das nur den DX11 Renderer benutzt? (Indem du zB das Testprojekt auf DX11 umstellst.)

__________________

Hallo
icon #9

Join Date: Mar 2011

Posts: 20

Quote from KN4CK3R post
Bekommste den Linkerfehler auch in nem neuen leeren Projekt, das nur den DX11 Renderer benutzt? (Indem du zB das Testprojekt auf DX11 umstellst.)
Ja, hab jetzt mal in das Sample Projekt, den 11 reingepackt, wieder das selbe 
TEXT Code:
  1. 1>------ Erstellen gestartet: Projekt: OSHGui Sample, Konfiguration: Release Win32 ------
  2. 1>Direct3D11Renderer.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DX11CompileFromMemory@52".
  3. 1>D3DX11Effects.lib(EffectLoad.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DGetInputSignatureBlob@12".
  4. 1>D3DX11Effects.lib(EffectLoad.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_D3DReflect@16".
  5. 1>E:\Privat\Sources\2.Internal\Bases\MineCore - DirectX Base\OSHLib\Projects\VS2013\Bin\Sample\x86\OSHGui Sample.exe : fatal error LNK1120: 3 nicht aufgelöste Externe ========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 1 aktuell, 0 übersprungen ==========
Last edited by Artur1338 (Fri 10. Jul 2015, 20:55)

Reason: no reason given

icon #10

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Seltsam, mit diesen Projektdateien auch?

Only registered and activated users can see links.

Die Pfade in den Projektdateien sind so gewählt, dass sie passen, wenn du die Dateien nach
TEXT Code:
  1. new_renderer\Projects\VS2013
entpackst.

__________________

Hallo
icon #11

Join Date: Mar 2011

Posts: 20

Quote from KN4CK3R post
Seltsam, mit diesen Projektdateien auch?

Only registered and activated users can see links.

Die Pfade in den Projektdateien sind so gewählt, dass sie passen, wenn du die Dateien nach
TEXT Code:
  1. new_renderer\Projects\VS2013
entpackst.
Hier geht es ohne Probleme.
Hab jetzt einfach alle Libs eingebunden aus dem Test Project, wie kann ich jetzt mit den Renderer Render mit den neuen ? Ich muss ja ein GeometryBuffer anlegen, das habe ich wie folgt.
TEXT Code:
  1. OSHGui::Drawing::Graphics g(*gRender->CreateGeometryBuffer());
Dann rufe ich das ja auf das er das Buffer rendenr soll, habe aber in Renderer keine Möglichkeit gefunden, das Buffer zu übergeben.

Last edited by Artur1338 (Fri 10. Jul 2015, 21:32)

Reason: no reason given

icon #12

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
entweder so:

CPP Code:
  1. //global oder in einer Klasse
  2. GeometryBufferPtr buffer;
  3. ...
  4. buffer = renderer.CreateGeometryBuffer();
  5.  
  6. void DieRenderFunktion()
  7. {
  8.     {
  9.         Graphics g(*buffer);
  10.         g.Clear();
  11.  
  12.         g....
  13.     }
  14.     buffer->Draw();
  15. }

oder so

CPP Code:
  1. void DieRenderFunktion()
  2. {
  3.     auto buffer = renderer.CreateGeometryBuffer();
  4.     {
  5.         Graphics g(*buffer);
  6.  
  7.         g....
  8.     }
  9.     buffer->Draw();
  10. }

Gibt leider außer dem Beispielprojekt noch keine Tutorials zum neuen Rendersystem.

__________________

Hallo
Last edited by KN4CK3R (Fri 10. Jul 2015, 21:40)

Reason: no reason given

icon #13

Join Date: Mar 2011

Posts: 20

Quote from KN4CK3R post
entweder so:

CPP Code:
  1. //global oder in einer Klasse
  2. GeometryBufferPtr buffer;
  3. ...
  4. buffer = renderer.CreateGeometryBuffer();
  5.  
  6. void DieRenderFunktion()
  7. {
  8.     {
  9.         Graphics g(*buffer);
  10.         g.Clear();
  11.  
  12.         g....
  13.     }
  14.     buffer->Draw();
  15. }

oder so

CPP Code:
  1. void DieRenderFunktion()
  2. {
  3.     auto buffer = renderer.CreateGeometryBuffer();
  4.     {
  5.         Graphics g(*buffer);
  6.  
  7.         g....
  8.     }
  9.     buffer->Draw();
  10. }

Gibt leider außer dem Beispielprojekt noch keine Tutorials zum neuen Rendersystem.
Alles klar, danke für deine Hilfe, sowie für deinen tollen Renderer, der nicht wie meiner 60 Fps Drops hat
Ich bedanke mich für deine Hilfe, zum glück ist man hier nicht bei UC, wo einen nichts gesagt wird und es immer heißt C + P ....
lg Artur1338
icon #14

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Zeig nen Screenshot vom Endergebnis wenns fertig ist.

__________________

Hallo
icon #15

Join Date: Mar 2011

Posts: 20

Mhh doch wohl zu früh gefreut, wird nicht gezeichnet.
TEXT Code:
  1. std::unique_ptr<OSHGui::Drawing::Renderer> gRender;
Das habe ich global gemacht.
Dann in der EndScene :
TEXT Code:
  1. static bool first = true;
  2. if (first)
  3. {
  4. gRender = std::make_unique<Direct3D9Renderer>(device);
  5. first = false;
  6. } else {
  7. gRender->BeginRendering();
  8. auto buffer = gRender->CreateGeometryBuffer();
  9. {
  10. Graphics g(*buffer);
  11. g.FillRectangle(Color::Black(), 900, 500, 300, 200);
  12. g.FillCircle(Color::Blue(), 900, 500, 200);
  13. } buffer->Draw();
  14. gRender->EndRendering(); }
Last edited by Artur1338 (Fri 10. Jul 2015, 22:31)

Reason: no reason given

icon #16

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Wie man sieht, hab ich das schon länger nimmer gebraucht. Einmal nen Wrapper drum geschrieben, dann vergessen.

CPP Code:
  1. static std::unique_ptr<OSHGui::Drawing::Renderer> renderer = std::make_unique<Direct3D9Renderer>(device);
  2.  
  3. renderer->BeginRendering();
  4.  
  5. auto buffer = renderer->CreateGeometryBuffer();
  6. {
  7.     Graphics g(*buffer);
  8.     g.FillRectangle(Color::Red(), 9, 5, 300, 200);
  9.     g.FillCircle(Color::Blue(), 9, 5, 200);
  10. }
  11.  
  12. auto &renderTarget = renderer->GetDefaultRenderTarget();
  13. renderTarget->Activate();
  14.  
  15. buffer->Draw();
  16.  
  17. renderTarget->Deactivate();
  18.  
  19. renderer->EndRendering();


__________________

Hallo
1 positive
0 negative
This post has been rated by:
Artur1338 (Fri 10. Jul 2015, 23:11)
icon #17

Join Date: Mar 2011

Posts: 20

Quote from KN4CK3R post
Wie man sieht, hab ich das schon länger nimmer gebraucht. Einmal nen Wrapper drum geschrieben, dann vergessen.

CPP Code:
  1. static std::unique_ptr<OSHGui::Drawing::Renderer> renderer = std::make_unique<Direct3D9Renderer>(device);
  2.  
  3. renderer->BeginRendering();
  4.  
  5. auto buffer = renderer->CreateGeometryBuffer();
  6. {
  7.     Graphics g(*buffer);
  8.     g.FillRectangle(Color::Red(), 9, 5, 300, 200);
  9.     g.FillCircle(Color::Blue(), 9, 5, 200);
  10. }
  11.  
  12. auto &renderTarget = renderer->GetDefaultRenderTarget();
  13. renderTarget->Activate();
  14.  
  15. buffer->Draw();
  16.  
  17. renderTarget->Deactivate();
  18.  
  19. renderer->EndRendering();
Habs jetzt anders gelöst.

CPP Code:
  1.  
  2. if (renderer == std::unique_ptr<Direct3D9Renderer>())
  3. {
  4. renderer = std::make_unique<Direct3D9Renderer>(device);
  5. }
  6. else
  7. {
  8. renderer->BeginRendering();
  9. {
  10. auto buffer = renderer->CreateGeometryBuffer();
  11. {
  12. Graphics g(*buffer);
  13. g.FillRectangle(Color::Red(), 9, 5, 300, 200);
  14. g.FillCircle(Color::Blue(), 9, 5, 200);
  15. }
  16.  
  17. _ASM_JUNK();
  18.  
  19. RenderSurface rendersurface_ = *renderer->GetDefaultRenderTarget();
  20.  
  21. rendersurface_.AddGeometry(RenderQueueType::Overlay, buffer);
  22. rendersurface_.Draw();
  23.  
  24. rendersurface_.Reset();
  25.  
  26. renderer->EndRendering();
  27. }
  28. }
  29.  
Weil er will nicht auf die virtuellen Funktionen von RenderTarget, zugreifen will.
Aber sonst gehts.

http://fs1.directupload.net/images/150710/5x3b2vns.jpg
Last edited by Artur1338 (Fri 10. Jul 2015, 23:44)

Reason: Hier noch ein Bild, einfach mal nen Game angemacht.

icon #18

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Das liegt daran, dass du eine Kopie vom RenderTarget machst und nicht mit der Referenz arbeitest. Der Code von mir funktioniert doch wie er soll oder?

CPP Code:
  1. if (renderer == std::unique_ptr<Direct3D9Renderer>())
Das kannst du einfach in
CPP Code:
  1. if (!renderer)
ändern.

__________________

Hallo
icon #19

Join Date: Mar 2011

Posts: 20

Quote from KN4CK3R post
Das liegt daran, dass du eine Kopie vom RenderTarget machst und nicht mit der Referenz arbeitest. Der Code von mir funktioniert doch wie er soll oder?

CPP Code:
  1. if (renderer == std::unique_ptr<Direct3D9Renderer>())
Das kannst du einfach in
CPP Code:
  1. if (!renderer)
ändern.
Ne ich hab mit der Referenz gearbeitet.
Das Problem ist das : http://i.imgur.com/2p3zRbR.jpg?1
Sorry hab zwei Bildschirme.
icon #20

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Dann gönn dir oben noch ein:
CPP Code:
  1. #include "Drawing/Direct3D9/Direct3D9RenderTarget.hpp"

Und schon geht alles.

BTW: Mit Alt+Druck kannste Screenshots von nur einem Fenster machen.

__________________

Hallo