dll w VS2010

0

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 ;]

0

Tutaj znajdziesz wszelkie niezbędne informacje:

http://darkcult.nazwa.pl/wiki/index.php/DLL

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ć.

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? ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1