Witam,
Zaczynam zabawę w krainie DLL, dokładniej mam program napisany w VS6 C++ i potrzebuje pod niego podpiąć (stworzyć) plik DLL w VS2010 C++. Dodam że jestem noobkiem i mój poziom znajomości programowania ogranicza się do podstaw c++ i środowiska VS6.
W sieci znalazłem kurs tworzenia dll w dev-c++, dość fajny i przejrzysty tylko że nie potrafię stworzyć DLL w VS2010, może mi ktoś napisać prosty wzór pod VS2010? chodzi mi o dynamiczne linkowanie funkcji i klas, dzięki z góry ;]
- Rejestracja:prawie 13 lat
- Ostatnio:ponad 12 lat
- Postów:9
0
edytowany 1x, ostatnio: eandy

- Rejestracja:ponad 21 lat
- Ostatnio:4 minuty
1
mydll.h
#pragma once
#ifndef MYDLLAPI
#define MYDLLAPI
#endif
extern MYDLLAPI int Dodaj(int a, int b);
extern MYDLLAPI int TakCzyNie();
mydll.c
#define MYDLLAPI __declspec(dllexport)
#include "mydll.h"
#include <windows.h>
int MYDLLAPI Dodaj(int a, int b)
{
return a+b;
}
int MYDLLAPI TakCzyNie()
{
return MessageBoxA(0, "Tak czy nie?", "Pytanie", MB_YESNO) == IDYES;
}
kompilacja
c:\pp\MYPROGS\C\dlltest>cl mydll.c /LD user32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
mydll.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:mydll.dll
/dll
/implib:mydll.lib
mydll.obj
user32.lib
Creating library mydll.lib and object mydll.exp
test.c
#include "mydll.h"
#include <stdio.h>
int main()
{
printf("2+2=%d\n", Dodaj(2,2));
printf("%s\n", TakCzyNie() ? "tak":"nie");
}
kompilacja
c:\pp\MYPROGS\C\dlltest>cl test.c mydll.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
test.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test.exe
test.obj
mydll.lib
Oczywiście w IDE trzeba sobie co nieco wyklikać.
edytowany 1x, ostatnio: Azarien
- Rejestracja:prawie 13 lat
- Ostatnio:ponad 12 lat
- Postów:9
0
Wszystko ładnie pięknie działa lecz gdy podpinam biblioteki mysql, dll nie chce się załadować
main.cpp
#define MYDLLAPI __declspec(dllexport)
#include "mainh.h"
#include <windows.h>
void MYDLLAPI getclient(char *name, char *ip, int port)
{
sendto(name, ip, port);
}
mysql.cpp
#include "mainh.h"
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <Rpc.h>
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
using namespace std;
void sendto(char *name, char *ip, int port)
{
sql::Driver *driver;
sql::Connection *con;
sql::PreparedStatement *pstmt;
driver = get_driver_instance();
con = driver->connect("localhost", "root", "");
con->setSchema("test");
char buff[750];
sprintf(buff, "INSERT INTO `players` ( `userID`,`name`, `ip`, `time`, `port`) VALUES ( '','%s', '%s', NOW(), '%i')", name, ip, port);
pstmt = con->prepareStatement(buff);
pstmt->executeUpdate();
delete pstmt;
}
mainh.h
#pragma once
#ifndef MYDLLAPI
#define MYDLLAPI
#endif
extern "C"
{
extern MYDLLAPI void getclient(char *name, char *ip, int port);
}
extern void sendto(char *name, char *ip, int port);
DLL buduje się, lecz nie mogę jej załadować przez inny program, pomożecie? ;]

Azarien
co to znaczy „nie chce się załadować”?

Azarien
poza tym, dodałeś extern C w nagłówku a w pliku .cpp już nie. dodaj albo wszędzie, albo wcale.