Register for your free account! | Forgot your password?

You last visited: Today at 14:05

  • Please register to post and access all features, it's quick, easy and FREE!

 

Need some help

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2008
Posts: 70
Received Thanks: 24
Need some help

Hi,

ich brauche etwas Hilfe bei meinem Bot.

Und zwar bekomme ich mit C++ in der Konsole Zeichen aus der Codepage 437 ausgegeben.

Nun müsste ich diese Zeichen aber in einem anderen Format vorliegen haben, um sie weiter zu verarveiten. Hat jemand eine Idee, wie ich das realisieren könnte? Vorzugsweise Integer oder so.

MfG
LoneGunman



LoneGunman is offline  
Old   #2
 
elite*gold: 0
Join Date: Apr 2008
Posts: 70
Received Thanks: 24
Hat davon keiner Ahnung oder will mir keiner helfen?

Der Bor wäre natürlich 4free ^^


LoneGunman is offline  
Old   #3
 
elite*gold: 0
Join Date: Jun 2009
Posts: 27
Received Thanks: 1
würde dir ja gerne helfen, aber für mich trifft leider "Keine Ahnung" zu, sorry und ich finde es cool, dass es 4free wäre. thx
Tinaria is offline  
Old   #4
 
elite*gold: 0
Join Date: Apr 2008
Posts: 70
Received Thanks: 24
C++ DLL in VB.NET 2008

Hallo,

ich hab ein ziemlich spezielles Problem. Da ich einige Speicher-Informationen auslesen möchte und dies aber mit VB.NET nicht so problemlos möglich ist, habe ich versucht, mein funktionierendes C++-Konsolenprogramm in eine DLL umzuwandeln.

Auf diese wollte ich dann mit VB.NET zugreifen, aber irgendwie will das nicht funktiuonieren.

Vielleicht könnt ihr euch mal den Code anschauen und mir sagen, wo der Fehler liegt?

MemoryDLL.cpp
Code:
#include "stdafx.h"

//#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <stdlib.h>

HWND hwnd;
HANDLE handle;
DWORD ID;

extern "C" __declspec(dllexport)void GetName(DWORD PLAYERBASE_PTR, DWORD PLAYERBASE_OFFSET, char& CharName);

void GetName(DWORD PLAYERBASE_PTR, DWORD PLAYERBASE_OFFSET, char& CharName)
{
	using namespace std;
	
	hwnd = FindWindow(NULL, (LPCWSTR)"Runes of Magicr");

    // Prozess-ID besorgen
	GetWindowThreadProcessId(hwnd, &ID);
		
	// Prozess öffnen mit allen Rechten
	//handle = OpenProcess(PROCESS_ALL_ACCESS, false, ID);
	handle = OpenProcess(PROCESS_VM_READ, false, ID);
	// Struct erstellen
	char cname[17];
	DWORD baseptr;
	DWORD pptr;

	// Adresse auslesen
	ReadProcessMemory(handle, (void*)PLAYERBASE_PTR, &baseptr, sizeof(baseptr), NULL);

	// Player Addy auslesen
	ReadProcessMemory(handle, (void*)(baseptr+PLAYERBASE_OFFSET), &pptr, sizeof(pptr), NULL);

	// Name auslesen
	ReadProcessMemory(handle, (void*)(pptr+0x0278), &cname, sizeof(cname), NULL);
}
dllmain.cpp
Code:
#include "stdafx.h"

BOOL APIENTRY DllMain( HMODULE 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;
}
Der Wert, welcher in cname steht, soll dann in VB:NET weiter verarbeitet werden.

Dazu habe ich filgendes Programm probiert, aber es geht eben nicht.
Code:
Imports System.Runtime.InteropServices

Public Class Form1

    Declare Auto Function GetName Lib "D:\Dokumente und Einstellungen\Enrico.SkyNet\Desktop\bot\DLL\MemoryDLL\Release\MemoryDLL.dll" ( _
        ByVal PLAYERBBASE_PTR As String, _
        ByVal PLAYERBASE_OFFSET As String, _
        ByRef CharName As String) _
        As String

    Dim PB_PTR As String = "0x0088EF20"
    Dim PB_OFFSET As String = "0x0580"
    Dim CN As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = "Start"


    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        GetName(PB_PTR, PB_OFFSET, CN)
        Label1.Text = PB_PTR
        Label2.Text = PB_OFFSET
        Label3.Text = CN
    End Sub
End Class
Irgendwie bekomme ich bei CN keinen Wert zurück.

MfG
LoneGunman


LoneGunman is offline  
Old   #5
 
elite*gold: 0
Join Date: May 2009
Posts: 16
Received Thanks: 2
Das Problem liegt doch klar auf der Hand:
Du machsts zwar alles richtig gibst aber keinen Wert zurück, womit auch kein Wert bei deinem VB Proggi ankommt.

So sollte es gehen:
Code:
	
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <stdlib.h>

using namespace std;

HWND hwnd;
HANDLE handle;
DWORD ID;

extern "C" __declspec(dllexport)void GetName(DWORD PLAYERBASE_PTR, DWORD PLAYERBASE_OFFSET, char* CharName);

void GetName(DWORD PLAYERBASE_PTR, DWORD PLAYERBASE_OFFSET, char* CharName)
{
	hwnd = FindWindow(NULL, (LPCWSTR)"Runes of Magic");

    // Prozess-ID besorgen
	GetWindowThreadProcessId(hwnd, &ID);
		
	// Prozess öffnen mit allen Rechten
	//handle = OpenProcess(PROCESS_ALL_ACCESS, false, ID);
	handle = OpenProcess(PROCESS_VM_READ, false, ID);
	// Struct erstellen
	char cname[17];
	DWORD baseptr;
	DWORD pptr;

	// Adresse auslesen
	ReadProcessMemory(handle, (void*)PLAYERBASE_PTR, &baseptr, sizeof(baseptr), NULL);

	// Player Addy auslesen
	ReadProcessMemory(handle, (void*)(baseptr+PLAYERBASE_OFFSET), &pptr, sizeof(pptr), NULL);

	// Name auslesen
	ReadProcessMemory(handle, (void*)(pptr+0x0278), &cname, sizeof(cname), NULL);

       strcpy(CharName,cname);
}
BackToReality is offline  
Old   #6
 
elite*gold: 0
Join Date: Apr 2008
Posts: 70
Received Thanks: 24
Quote:
Originally Posted by BackToReality View Post
Code:
	
strcpy(CharName,cname);
Du meinst, diese kleine Dreckszeile löst mein problem? Ich versuch das nachher mal ^^

Edit:
Hab es versucht und es geht nicht. Unerlaubter Speicherzugriff auf geschützten Bereich... blablubb)

Hab selbst mit
Code:
CharName = "Test";
getestet, aber das kommt irgendwie auch nicht in VB.net an.

Weiß jemand, woran das nun wieder liegt?
LoneGunman is offline  
Old   #7
 
elite*gold: 0
Join Date: May 2009
Posts: 16
Received Thanks: 2
Quote:
Du meinst, diese kleine Dreckszeile löst mein problem? Ich versuch das nachher mal ^^
Ne tut sie nicht du musst hier anstatt einer Referenz einen Pointer nehmen:

Code:
char* CharName
Das musst du dann auch in deinem VB Programm anpassen. Dann muss es gehen habs selbst ausprobiert^^


BackToReality is offline  
Reply



« Previous Thread | Next Thread »



All times are GMT +1. The time now is 14:05.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.