Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#/C++]loopt vast op DLLImport

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een C++ DLL importeren in een C# omgeving.
Nu heb ik overal op internet al gezocht hoe dit moet en dit ook toegepast in mijn code.
Nu gaat het compile prima maar zodra ik run en ik kom aan bij het runnen van een functie in mijn C++ DLL die ik dus aanroep in C# hangt het programma en sluit het af.
Wat doe ik verkeerd of is er een andere oplossing hiervoor?

C++ Code:
code:
1
2
3
4
extern "C"
{
   extern __declspec(dllexport) int tmain(int a);
}


C# Code:
code:
1
2
3
4
public partial class GUI : Form
    {
        [DllImport("MAIN.dll", EntryPoint = "_tmain")]
        static extern int _tmain(int a);

C# Code: Op deze regel hangt het programma.
code:
1
2
3
private void StartTesting2_Click(object sender, EventArgs e)
        {
            _tmain(0);

ps. ik ben een aardige beginner. ook nieuw op tweakers!

[ Voor 2% gewijzigd door whoami op 13-12-2007 09:04 ]


  • ATS
  • Registratie: September 2001
  • Laatst online: 28-11 20:56

ATS

Tip: gebruik ajb code tags om te zorgen dat wij je code ook makkelijk kunnen lezen hier.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-11 22:54
Het programma hangt, of je krijgt een foutmelding ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Het programma hangt

  • EfBe
  • Registratie: Januari 2000
  • Niet online
waarom exporteer je tmain maar roep je aan: _tmain ?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
typ foutje....maar probleem blijft hetzelfde

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Heb een paar jaar geleden ook daar iets mee gedaan, en bij mij ziet het er zo uit:

.h
C++:
1
2
3
4
5
#if !defined (MYDLL)
#define MYDLL __declspec(dllimport)
#endif

extern "C" MYDLL BOOL WINAPI DoSomething(int a);


.cpp
C++:
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
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        // DLL is attaching to the address space of the current process.
        break;

    case DLL_THREAD_ATTACH:
        // A new thread is being created in the current process.
        break;

    case DLL_THREAD_DETACH:
        // A thread is exiting cleanly.
        break;

    case DLL_PROCESS_DETACH:
        // The calling process is detaching the DLL from its address space.
        break;
    }

    return TRUE;
}

BOOL WINAPI DoSomething(int a)
{
    return TRUE;
}


En dan moet het .NET gewoon zo werken als je nu al doet.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

Topicstarter
Volgens mij is dit niet toepasbaar op mijn toepassing.
En is de .h file niet in c++?

  • The End
  • Registratie: Maart 2000
  • Laatst online: 12:04

The End

!Beginning

Mag je uberhaupt wel _tmain exporteren? Probeer eens een andere naam.

Je zegt dat het hangt en dat het afsluit. Dat kan niet allebei :) Het hangt of het sluit af (crash).

Voor de geinteresseerden: '_tmain' is de unicode versie van 'main'.

[ Voor 59% gewijzigd door The End op 13-12-2007 10:43 ]


Verwijderd

Topicstarter
heb naam proberen te veranderen. En voor de goede orde hij crasht :S

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Heb je al in de eventviewer van je machine gekeken?
Draai je je programma vanuit visual studio of click je gewoon op de executable?

Verwijderd

Topicstarter
ik debug vanuit VS2005

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

The End schreef op donderdag 13 december 2007 @ 10:39:
Voor de geinteresseerden: '_tmain' is de unicode versie van 'main'.
Nee, _tmain() is main() of wmain(), afhankelijk van of _UNICODE gedefinieerd is of niet. Maar de TS heeft het over tmain(), niet over _tmain(), en als ie tchar.h niet include dan werkt die define sowieso niet. Aangezien hij geen runtime errors krijgt over een niet gevonde methode gok ik dat ie dat dus gewoon verder goed doet.

Gaiz: het probleem is de calling convention. DllImport gebruikt standaard stdcall, een losse functie in VC++ is standaard cdecl. Dus je moet zorgen dat die gelijk zijn.

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.


Verwijderd

Topicstarter
thanx...door _tmain te veranderen in wmain werkte het.
iedereen bedankt voor de moeite

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat het werkt wil nog niet zeggen dat het klopt. Je calling convention komt altijd nog niet overeen :)

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.


Verwijderd

Topicstarter
dat klopt had ik ook naar gekeken maar das nu in orde.
Pagina: 1