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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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