Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Перевести код с Delphi на С

Ответить
Настройки темы
Delphi - Перевести код с Delphi на С

Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19


Конфигурация

Профиль | Отправить PM | Цитировать


Доброго дня может кто поможет перевести код с Delphi на С
Код: Выделить весь код
PLUGIN_NAME='biss'; 
procedure On_Send_Dll_ID_Name(var Name:array of char );cdecl; 
var s:PChar;
 i:Integer; 
begin s:=PLUGIN_NAME; 
 for i:=0 to Length(s) do Name:=s; 
end; 
exports On_Send_Dll_ID_Name name 'On_Send_Dll_ID_Name';

Отправлено: 17:06, 26-08-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


примерно так

Код: Выделить весь код
#include <string.h>
................................................
const char*  PLUGIN_NAME="biss";

extern "C" __declspec(dllexport) void __stdcall On_Send_Dll_ID_Name(char* Name)
{
    strcpy(Name,PLUGIN_NAME);
}

Последний раз редактировалось ferget, 26-08-2012 в 20:05.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:11, 26-08-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


пробовал так, но это приводит к зависанию программы.Пишу dll осталось передать имя
если запускать так, то плагин работает но нет имени

Код: Выделить весь код
extern "C" __declspec(dllexport) void __stdcall On_Send_Dll_ID_Name()  {   }
И рабочий пример на Delphi. может вы увидите где у меня ошибка. что не так на С, почему не передаёт имя
Код: Выделить весь код
http://ymalbisssport.narod.ru/BISS.zip

Отправлено: 21:06, 26-08-2012 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Тут надо заранее выделять память под Name


int main()
{
char* RetName=new char[255];
On_Send_Dll_ID_Name(RetName);
//тут используется RetName
delete[] RetName;
return 0;
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:43, 26-08-2012 | #4


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar DLL_vplug.rar
(17.3 Kb, 12 просмотров)

ferget, если выделить - получаем массу ошибок или я что не так делаю
Если не затруднит , можете глянуть мой проект.Мне нужно вывести имя, в таком виде как у меня он сейчас- он работает но нету имени, запросы доходят

Отправлено: 22:28, 26-08-2012 | #5


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Builer'а нету, поэтому сделал тестовую Dll в VS

DLL:

файл main.cpp

Код: Выделить весь код
#include <string.h>
#include "main.h"

const char*  PLUGIN_NAME="biss";
// a sample exported function
extern "C" __declspec(dllexport) void __stdcall On_Send_Dll_ID_Name(char* Name)
{
	strcpy(Name,PLUGIN_NAME);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
	switch (fdwReason)
	{
	case DLL_PROCESS_ATTACH:
		// attach to process
		// return FALSE to fail DLL load
		break;

	case DLL_PROCESS_DETACH:
		// detach from process
		break;

	case DLL_THREAD_ATTACH:
		// attach to thread
		break;

	case DLL_THREAD_DETACH:
		// detach from thread
		break;
	}
	return TRUE; // succesful
}
файл main.h

Код: Выделить весь код
#ifndef __MAIN_H__
#define __MAIN_H__

#include <windows.h>

/*  To use this exported function of dll, include this header
 *  in your project.
 */

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif


#ifdef __cplusplus
extern "C"
{
#endif

__declspec(dllexport) void __stdcall On_Send_Dll_ID_Name(char* Name);

#ifdef __cplusplus
}
#endif

#endif // __MAIN_H__
для проверки

файл testDll.cpp

Код: Выделить весь код
#include <iostream>
#include "main.h"
using namespace std;

#pragma comment(lib,"Win32Project1")

int main()
{
	char* ls=new char[20];
	On_Send_Dll_ID_Name(ls);
	cout<<ls<<endl;
	delete[] ls;
	return 0;
}
выводит в консоль biss
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:24, 26-08-2012 | #6


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


ferget, всё ровно что то не то, сразу навешивается программа (DVB DREAM), а вот с Delphi примером всё хорошо.

-------
Одна голова хорошо, а двух у меня нет...


Отправлено: 23:40, 26-08-2012 | #7


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


тогда можно попробовать так

Код: Выделить весь код
extern "C" __declspec(dllexport) const char* __stdcall On_Send_Dll_ID_Name()
{
	return "biss";
}
Код: Выделить весь код
__declspec(dllexport) const char* __stdcall On_Send_Dll_ID_Name();
проверка

Код: Выделить весь код
#include <iostream>
#include <string>
#include "main.h"
using namespace std;

#pragma comment(lib,"Win32Project1")

int main()
{
	string ls(SomeFunction());
	cout<<ls<<endl;
	return 0;
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:05, 27-08-2012 | #8


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


ferget,
Код: Выделить весь код
 [C++ Error] E2147 'SomeFunction' cannot start a parameter declaration

-------
Одна голова хорошо, а двух у меня нет...


Последний раз редактировалось ddv122, 27-08-2012 в 00:22.


Отправлено: 00:13, 27-08-2012 | #9


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg 2012-08-26_231610.jpg
(13.3 Kb, 14 просмотров)

Вот что получается, но если положить плагин biss то мой безымянный подхватит его имя
Вот ещё что нашел
typedef VOID (*On_Send_Dll_ID_Name)(char *Name );
● Name is a pointer to a character array with fixed size of 128 bytes
You MUST copy your plugin name to this location. The given string names the plugin and
also will be used to append the plugin pull-down menu inside WTV.

Отправлено: 00:18, 27-08-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Перевести код с Delphi на С

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] перевести exe в iso junior_step Microsoft Windows NT/2000/2003 7 17-03-2011 18:29
Помогите перевести... Disconnect Выбор отдельных компонентов компьютера и конфигурации в целом 4 17-10-2009 17:57
перевести txt на html cirgiq1980 Хочу все знать 1 26-12-2008 09:10
Прочие БД - Как перевести SQL в MD5 VM007 Программирование и базы данных 4 24-10-2008 11:13
Как перевести с Английского APOSTOL Программирование и базы данных 5 21-01-2004 16:46




 
Переход