Показать полную графическую версию : Перевести код с Delphi на С
Доброго дня может кто поможет перевести код с 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';
примерно так
#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);
}
пробовал так, но это приводит к зависанию программы.Пишу dll осталось передать имя
если запускать так, то плагин работает но нет имени
extern "C" __declspec(dllexport) void __stdcall On_Send_Dll_ID_Name() { }
И рабочий пример на Delphi. может вы увидите где у меня ошибка. что не так на С, почему не передаёт имя
http://ymalbisssport.narod.ru/BISS.zip
Тут надо заранее выделять память под Name
int main()
{
char* RetName=new char[255];
On_Send_Dll_ID_Name(RetName);
//тут используется RetName
delete[] RetName;
return 0;
}
ferget, если выделить - получаем массу ошибок или я что не так делаю
Если не затруднит , можете глянуть мой проект.Мне нужно вывести имя, в таком виде как у меня он сейчас- он работает но нету имени, запросы доходят
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
ferget, всё ровно что то не то, сразу навешивается программа (DVB DREAM), а вот с Delphi примером всё хорошо.
тогда можно попробовать так
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;
}
ferget, [C++ Error] E2147 'SomeFunction' cannot start a parameter declaration
Вот что получается, но если положить плагин 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.
Посмотрю DVB DREAM, что там и как
На официальном сайте программы лежит SDK, там есть примеры на С++, там показано как имя выводится выводится
ferget, я видел sdk . я с их и начинал но не чего это не дало, я в другом форуме с людьми всё перепробовали...но результатов не дало..на Delphi всё работает..
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.