2008-09-02 11 views
2

Ich versuche, eine C-DLL eines Drittanbieters von vb.net 2005 aufzurufen und P/Invoke-Fehler zu bekommen. Ich rufe erfolgreich andere Methoden an, aber habe einen Flaschenhals auf einem der komplexeren getroffen. Die beteiligten Strukturen sind entsetzlich und in einem Versuch, die Fehlersuche zu vereinfachen Ich möchte eine C++ DLL erstellen, um das Problem zu replizieren.Sehr einfache C++ DLL, die von .net aufgerufen werden kann

Kann jemand das kleinste Code-Snippet für eine C++ DLL bereitstellen, die von .Net aufgerufen werden kann? Ich erhalte einen Fehler in der C++ - DLL, der in der DLL nicht gefunden werden kann. Es sollte einfach zu lösen sein, aber ich bin kein C++ - Programmierer. in C++ Funktionsdeklaration

Ich mag eine .net Deklaration für die DLL von dem Staub __decspec(dllexport) Magie Pixie mit Versuchen

Declare Function Multiply Lib "C:\MyDll\Debug\MyDLL.DLL" Alias "Multiply" (ByVal ParOne As Integer, ByVal byvalParTwo As Integer) As Integer 

Antwort

2

verwenden. Diese Deklaration richtet mehrere Dinge ein, die Sie benötigen, um eine Funktion erfolgreich aus einer DLL zu exportieren. Möglicherweise müssen Sie auch ähnliche WINAPI oder etwas verwenden:

__declspec(dllexport) WINAPI int Multiply(int p1, int p2) 
{ 
    return p1 * p2; 
} 

Die WINAPI up setzt die Funktion Aufrufkonvention, so dass sie von einer Sprache für den Aufruf wie VB.NET geeignet ist.

0

Sie können versuchen, die exportierten Funktionen (über DumpBin oder Dependency Walker) zu sehen und zu sehen, ob die Namen verstümmelt sind.

0

Mit Gregs Vorschlag fand ich die folgenden Arbeiten. Wie bereits erwähnt, bin ich kein C++ Programmierer, sondern brauchte nur etwas Praktisches.

MyClass.cpp #include "stdafx.h"

BOOL APIENTRY DllMain(HANDLE hModule, 
         DWORD ul_reason_for_call, 
         LPVOID lpReserved 
       ) 
{ 
    return TRUE; 
} 

int _stdcall multiply(int x , int y) 
{ 
    return x*y; 
} 

myclass.def BIBLIOTHEK myclass

EXPORTS 

multiply @1 

stdafx.cpp #include „stdafx. h "

stdafx.h

// stdafx.h : include file for standard system include files, 
// or project specific include files that are used frequently, but 
//  are changed infrequently 
// 

#if !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_) 
#define AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_ 

#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 


// Insert your headers here 
#define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers 

#include <windows.h> 


//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 

#endif // !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_) 
Verwandte Themen