ho un exe che utilizza una dll:

//metodo, sempre static, che utilizza la dll (Client.cpp)
codice:
int Client::CallDllFunc(comando cmd)
    {
    HMODULE hmodule=::LoadLibrary("dll12.dll"); 

	if(hmodule)
		{
		Command_Dll foo = (Command_Dll) GetProcAddress(hmodule,"foo"); 
		foo(cmd);
		FreeLibrary(hmodule);
		}
	return 0;
	}
e comando è così dichiarato nel file Client.h:

codice:
struct comando
	{
	string cmd;
	string p1;
	string p2;
	string pNum;
	string pAgg;
	};

Invece questa è la dll

codice:
#include <Windows.h>
#include <string>

using namespace std;

//forse devo scrivere _declspec(dllexport)?? o mettere le parentesi graffe dopo extern "C" ossia
/*
extern "C" {
        struct comando{
	string cmd;
	string p1;
	string p2;
	string pNum;
	string pAgg;
	};
}
*/
extern "C" struct comando{
	string cmd;
	string p1;
	string p2;
	string pNum;
	string pAgg;
	};

extern "C" _declspec(dllexport) void foo(comando cmd)
{

Sleep(200); //breakpoint i valori di cmd si trovano qui http://img638.imageshack.us/i/debug1.jpg/

//blabla
}
da notare che la struttura cmd che avevo passato era così composta:

cmd.cmd = "Prova"
cmd.p1 = ":("
cmd.p2 = ""
cmd.pNum = ""
cmd.pAgg = "Provaa"


cosa può essere successo???? adesso mi sto rompendo di queste stringhe..e tra poco riscrivo la struttura di string in una bella stringa char * con dentro tutto quanto...ma mi rompe anche fare questo e che mi compaiano errori simili! -.-"

//nota uso "multy byte characters set" ossia no UNICODE