15. april 2005 - 11:11
Der er
26 kommentarer og 1 løsning
Opbygning af DLL fil
Nu har jeg endelig fået loade min dll ind i C# sharp, men har nogle problemer med at kalde funktioner i selve dll filen, ER der nogen bestemt måde at opbygge c++ dll filer på, hvis ja hvad skal jeg gøre for at jeg kan kalde mine metoder i filen. har forsøgt med __declspec(dllexport)CString Decrypt(CString strText, CString strKey); i header, skal jeg gøre andet
Annonceindlæg fra DE-CIX
15. april 2005 - 11:15
#1
Jeg tror du får problemer med CString - det er en MFC ting !
15. april 2005 - 11:21
#2
hvordan kan jeg så returnere en streng
15. april 2005 - 11:34
#3
kan man ikke opbygge en mfc dll
15. april 2005 - 11:47
#4
Det er ikke noget problem at lave en DLL som bruger MFC. Problemet er mapningen mellem C# typer og native C++ typer.
15. april 2005 - 11:49
#5
Jeg mener at C# string og native C++ char* matcher - jeg er meget skeptisk over hvad en CString skulle være i .NET
15. april 2005 - 11:59
#6
ja, det kan jeg selvfølgelig godt se, men jeg kan vel sagtens benytte CString i selve dll filen og så bruge char * til det funktioner som skal snakke med C#
15. april 2005 - 12:03
#7
ja
15. april 2005 - 12:13
#8
Hvordan laver jeg så min CString om til en char *! jeg har forsøgt med at cast den altså return (char *)str;
15. april 2005 - 12:44
#9
char *ditchararray = (LPCTSTR)dincstring; hvis du kun skal bruge værdien (altså ikke ændre den)
15. april 2005 - 12:44
#10
hov det skal nok være const char *ditchararray = (LPCTSTR)dincstring;
15. april 2005 - 13:20
#11
ja, okay, nu har jeg fået den til at kompilere uden fejl, men er det rigtigt nok med __declspec(dllexport)const char * Decrypt(CString strText, CString strKey); eller skal jeg gøre noget andet ??
15. april 2005 - 13:39
#12
skal de 2 argumenter ikke også være const char * ?
15. april 2005 - 13:40
#13
Jeg her iøvrigt et eksempel.
15. april 2005 - 13:40
#14
#ifdef STRDLL_EXPORTS #define STRDLL_API __declspec(dllexport) #else #define STRDLL_API __declspec(dllimport) #endif extern "C" { STRDLL_API char *dup(char *s); }
15. april 2005 - 13:40
#15
#include "stdafx.h" #include "StrDLL.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } static char buf[100]; STRDLL_API char *dup(char *s) { strcpy(buf,s); strcat(buf,s); return buf; }
15. april 2005 - 13:41
#16
using System; using System.Runtime.InteropServices; class MainClass { [DllImport("D:\\IDEProjects\\VisualStudio\\StrDLL\\Release\\StrDLL.dll")] private static extern string dup(string s); public static void Main(string[] args) { string s1 = "abc"; string s2 = dup(s1); Console.WriteLine(s1 + "->" + s2); } }
15. april 2005 - 14:01
#17
er dette her din header fil : 15/04-2005 13:40:42 hvis ja, så har du ikke nogen klasse til den. Skal man have en main i sin dll fil
15. april 2005 - 14:13
#18
min kode er C ikke C++ det er vist god skik og brug at have en DllMain i sin DLL
15. april 2005 - 14:24
#19
Okay Det skal laves for alle funktioner som skal ud/ind af dll filen #ifdef STRDLL_EXPORTS #define STRDLL_API __declspec(dllexport) #else #define STRDLL_API __declspec(dllimport) #endif
15. april 2005 - 14:27
#20
Når man laver et win32 projekt, starter den op på følgende måde header: #ifdef DES_EXPORTS #define DES_API __declspec(dllexport) #else #define DES_API __declspec(dllimport) #endif // This class is exported from the DES.dll class DES_API CDES { public: CDES(void); // TODO: add your methods here. }; extern DES_API int nDES; DES_API int fnDES(void); CPP #ifdef _DEBUG #define new DEBUG_NEW #endif // The one and only application object CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs _tprintf(_T("Fatal Error: MFC initialization failed\n")); nRetCode = 1; } else { // TODO: code your application's behavior here. } return nRetCode; }
15. april 2005 - 14:41
#21
nu har jeg lavet et simpelt projekt, kun med en funktion i, jeg kan stadig ikke bruge det.
Hvad gør jeg galt
Mit kode ligger på
www.testpilot.dk/dllfiler/dll.rar De eneste forskelle er vores main er forskellige og jeg i c++ og dit i c
15. april 2005 - 16:57
#22
Jeg mener du skal have en .def fil hvor du lister de funktioner i DLL'en der skal kunne kaldes af andre programmer. Har du det ?
15. april 2005 - 19:52
#23
Der er ikke noget i min .def fil, hvordan får jeg noget i den, eller skal jeg selv lave den. hvis jeg selv skal lave den, hvordan gør jeg så ???
15. april 2005 - 22:59
#24
VC++ plejer at kunne eksportere __declspec(dllexport) navnene uden .def fil
15. april 2005 - 23:22
#25
Du skal blot skrive flg. i din .def fil: EXPORTS myFunction1 myFunction2 osv. arne >> Du har sikkert ret i at VC++ kan eksportere uden en .def fil - jeg husker blot at det var løsningen på et lignende problem jeg havde engang.
18. april 2005 - 10:28
#26
jeg har ikke kunne få den til det og jeg har ikke mere tid til at forsøge mig med det, så arne_v send et svar
18. april 2005 - 10:32
#27
ok
Kurser inden for grundlæggende programmering