пример
Помогите плиз
в Блитце есть тип Type a Field x Fiels y Fiels z End Type Скажите как мне передать в ДЛЛ этот тип, в ДЛЛке допустим назначить новые значения поля объектам этого типа и вернуть все в блитц Или например: в блитце вызываем функцию из ДЛЛ DistanceCamera(PosCamX,PosCamY,PosCamZ), которая определяет нужно ли включать в тип и передавать в блитц данные об объектах Type'а а и только полученные объекты рендерить Если не трудно объясните на примере.. в коде...(BLITZ3D, c++) ДЛЛ хочу писать на с++ заранее спасибки за помощь... |
Re: пример
Самое простое - передать хендл типа - это будет адрес начала. далее расчитываешь смещения для переменных (см исследования МихаилаВ)
Просто в длл меняешь их значения и ничего возвращать не нужно |
Re: пример
Цитата:
|
Re: пример
Visual Studio:
Создаешь новый проект Win32 Dynamic-Link Library. Проект долджен быть пустым. После создания добавляешь cpp файл. В нем пишешь: [highlight=cpp] #define BLITZDECL extern "C" _declspec(dllexport) struct list { int a; float b; }; BLITZDECL void _stdcall DLLFunction(list* var) { var->a = var->a + 10; var->b = var->b - 0.6f; } [/highlight] BlitzBasic: [highlight=blitzbasic] Type TList Field int_val% Field float_val# End Type var.TList = New TList var\int_val = 5 var\float_val = 7.3 Print var\int_val Print var\float_val WaitKey() DLLFunction(var) Print var\int_val Print var\float_val WaitKey() Delete Each TList End [/highlight] decls-файл: Код:
.lib "dll.dll" |
Re: пример
спасибо... понял...но вытекает следующий вопрос...
получается список типа Tlist состоит из одного элемента, значение полей которого мы и меняем в длл...правильно... а как сделать так чтобы длл возвращала определенное кол-во элементов списка типа Tlist т.е. пример: в БД есть список игроков в кол-ве 2000 шт с определенными координатами дллка читает БД определяет колво игроков, находящихся на расстоянии 10 от камеры, и только эти игроки (например - 20) и должны быть отрендерены в блитце так вот как отдать из длл список типа Tlist нужного кол-ва ? мысль: зачем гонять список типа из 2000 элементов, если можно перебрать только 20? |
Re: пример
Цитата:
Если же хочется в DLL, то синхронизируй создание новых экземпляров типа в DLL и на Блице. Потом работай с элементами нужных тебе экземпляров в DLL и "посылай" их в Блиц. |
Re: пример
Цитата:
я то думал возможно наоборот в дллке получить из базы данных список, прогнать через условие и элементы, удовлетворящие условию, послать в блитц... а так, придется сначала через длл определять кол-во элементов а уже потом в цикле из длл работать с полями.... криво как-то |
Re: пример
Возможно все, если четко сформулировать задачу.
Если ты хочешь в Блиц послать только 20 элементов, то кто тебе мешает сделать это следующим образом: [highlight=blitzbasic] CallDllFunction() ;в этот момент происходит работа дллки с БД ... while DllResult() var.TList = New TList DLLFunction(var) wend [/highlight] Суть в том, что дллка подготавливает всю необходимую информацию. Допустим в результате вызова CallDllFunction() произошло считывание из БД, выборка результатов и занесение их в массив определенного пользователем типа. Код:
list* data[20]; [highlight=cpp] int result_num=0; [/highlight] Функция DllResult() возвращает значение result_num. [highlight=cpp] int DllResult() { return result_num; } [/highlight] А сама DLLFunction работает с текущим элементом. Код:
void DLLFunction(list* var) |
Re: пример
Цитата:
|
Re: пример
В MSDN ищи описания для: 1) malloc, realloc, free для С и 2) new, new[], delete, delete[] для C++.
|
Re: пример
Люди, помогите плиз....
Вот код... Блитц Код:
Const MAX%=10 Код:
#define B3DDLL extern "C" _declspec(dllexport) или я ерунду пытаюсь сделать? |
Re: пример
Во-первых, что это за безобразие?!
Цитата:
Part в проге на Блице. Оно-то структуру в длл изменит, но придется ухищрятся, чтобы получить необходимые x и y. А так, вообще, у меня на Блице выдает 2500 мс, а через DLL - 120 с чем-то :) |
Re: пример
Цитата:
или я неправильно опреатор использую? Цитата:
Цитата:
|
Re: пример
Цитата:
|
Re: пример
GoodWin
совет - сначала лутче научись на C++ прогать потом уже сойденение либ делай а то еще чисто философский цикл Код:
#define правда true |
Часовой пояс GMT +4, время: 06:14. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot