Вызов функций внешней dll из випа

База знаний

Модераторы: m0p3e, edward_K, Модераторы

Ответить
sensoft
Постоянный гость
Сообщения: 67
Зарегистрирован: 15 апр 2008, 16:48
Откуда: Череповец

Вызов функций внешней dll из випа

Сообщение sensoft »

Проверял в Express - работает и с атлантис 5.4.14 и без (свободный
fpc196).
http://sites.google.com/site/svobodnyef ... es/cube.7z
в архиве - вип исходник, его сборка user.res (атлантис 5.4.23) и dll (fpc196).
Последний раз редактировалось sensoft 19 июл 2011, 14:54, всего редактировалось 1 раз.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Вызов функций внешней dll из випа

Сообщение galover »

Ну ты крут! Поставил плюсик. Понравилось! Не знал что так можно. Только вот описание скудное, к тому же собрано на старом Атлантисе (пришлось перекомпилировать). Для тем кому качать и компилить влом, приведу код (удивительно короткий), надеюсь автор не будет против

Код: Выделить всё

const
cmC000=3000;cmC001=3001;cmC002=3002;cmC003=3003;cmC004=3004;cmC005=3005;cmC006=3006;cmC007=3007;cmC008=3008;cmC009=3009;cmC010=3010;cmC011=3011;cmC012=3012;cmC013=3013;cmC014=3014;cmC015=3015;cmC016=3016;cmC017=3017;cmC018=3018;cmC019=3019;
cmC020=3020;cmC021=3021;cmC022=3022;cmC023=3023;cmC024=3024;cmC025=3025;cmC026=3026;cmC027=3027;cmC028=3028;cmC029=3029;cmC030=3030;cmC031=3031;cmC032=3032;cmC033=3033;cmC034=3034;cmC035=3035;cmC036=3036;cmC037=3037;cmC038=3038;cmC039=3039;
cmC040=3040;cmC041=3041;cmC042=3042;cmC043=3043;cmC044=3044;cmC045=3045;cmC046=3046;cmC047=3047;cmC048=3048;cmC049=3049;cmC050=3050;cmC051=3051;cmC052=3052;cmC053=3053;cmC054=3054;cmC055=3055;cmC056=3056;cmC057=3057;cmC058=3058;cmC059=3059;
cmC060=3060;cmC061=3061;cmC062=3062;cmC063=3063;cmC064=3064;cmC065=3065;cmC066=3066;cmC067=3067;cmC068=3068;cmC069=3069;cmC070=3070;cmC071=3071;cmC072=3072;cmC073=3073;cmC074=3074;cmC075=3075;cmC076=3076;cmC077=3077;cmC078=3078;cmC079=3079;
cmC080=3080;cmC081=3081;cmC082=3082;cmC083=3083;cmC084=3084;cmC085=3085;cmC086=3086;cmC087=3087;cmC088=3088;cmC089=3089;cmC090=3090;cmC091=3091;cmC092=3092;cmC093=3093;cmC094=3094;cmC095=3095;cmC096=3096;cmC097=3097;cmC098=3098;cmC099=3099;
cmC100=3100;cmC101=3101;cmC102=3102;cmC103=3103;cmC104=3104;cmC105=3105;cmC106=3106;cmC107=3107;cmC108=3108;cmC109=3109;cmC110=3110;cmC111=3111;cmC112=3112;cmC113=3113;cmC114=3114;cmC115=3115;cmC116=3116;cmC117=3117;cmC118=3118;cmC119=3119;
cmC120=3120;cmC121=3121;cmC122=3122;cmC123=3123;cmC124=3124;cmC125=3125;cmC126=3126;cmC127=3127;cmC128=3128;cmC129=3129;cmC130=3130;cmC131=3131;cmC132=3132;cmC133=3133;cmC134=3134;cmC135=3135;cmC136=3136;cmC137=3137;cmC138=3138;cmC139=3139;
cmC140=3140;cmC141=3141;cmC142=3142;cmC143=3143;cmC144=3144;cmC145=3145;cmC146=3146;cmC147=3147;cmC148=3148;cmC149=3149;cmC150=3150;cmC151=3151;cmC152=3152;cmC153=3153;cmC154=3154;cmC155=3155;cmC156=3156;cmC157=3157;cmC158=3158;cmC159=3159;
cmC160=3160;cmC161=3161;cmC162=3162;cmC163=3163;cmC164=3164;cmC165=3165;cmC166=3166;cmC167=3167;cmC168=3168;cmC169=3169;cmC170=3170;cmC171=3171;cmC172=3172;cmC173=3173;cmC174=3174;cmC175=3175;cmC176=3176;cmC177=3177;cmC178=3178;cmC179=3179;
cmC180=3180;cmC181=3181;cmC182=3182;cmC183=3183;cmC184=3184;cmC185=3185;cmC186=3186;cmC187=3187;cmC188=3188;cmC189=3189;cmC190=3190;cmC191=3191;cmC192=3192;cmC193=3193;cmC194=3194;cmC195=3195;cmC196=3196;cmC197=3197;cmC198=3198;cmC199=3199;
cmC200=3200;cmC201=3201;cmC202=3202;cmC203=3203;cmC204=3204;cmC205=3205;cmC206=3206;cmC207=3207;cmC208=3208;cmC209=3209;cmC210=3210;cmC211=3211;cmC212=3212;cmC213=3213;cmC214=3214;cmC215=3215;cmC216=3216;cmC217=3217;cmC218=3218;cmC219=3219;
cmC220=3220;cmC221=3221;cmC222=3222;cmC223=3223;cmC224=3224;cmC225=3225;cmC226=3226;cmC227=3227;cmC228=3228;cmC229=3229;cmC230=3230;cmC231=3231;cmC232=3232;cmC233=3233;cmC234=3234;cmC235=3235;cmC236=3236;cmC237=3237;cmC238=3238;cmC239=3239;
cmC240=3240;cmC241=3241;cmC242=3242;cmC243=3243;cmC244=3244;cmC245=3245;cmC246=3246;cmC247=3247;cmC248=3248;cmC249=3249;cmC250=3250;cmC251=3251;cmC252=3252;cmC253=3253;cmC254=3254;cmC255=3255;cmC256=3256;cmC257=3257;cmC258=3258;cmC259=3259;
cmC260=3260;cmC261=3261;cmC262=3262;cmC263=3263;cmC264=3264;cmC265=3265;cmC266=3266;cmC267=3267;cmC268=3268;cmC269=3269;cmC270=3270;cmC271=3271;cmC272=3272;cmC273=3273;cmC274=3274;cmC275=3275;cmC276=3276;cmC277=3277;cmC278=3278;cmC279=3279;
cmC280=3280;cmC281=3281;cmC282=3282;cmC283=3283;cmC284=3284;cmC285=3285;cmC286=3286;cmC287=3287;cmC288=3288;cmC289=3289;cmC290=3290;cmC291=3291;cmC292=3292;cmC293=3293;cmC294=3294;cmC295=3295;cmC296=3296;cmC297=3297;cmC298=3298;cmC299=3299;
cmQQQQ=3300;cmGame=3301;
cmBEST=3400;cmG001=3401;cmG002=3402;cmG003=3403;cmG004=3404;
end;

var
  o:byte;
  score1,score2:word;

function  TuneCube:byte;   external 'cube.dll';
procedure FindCube(o:byte);external 'cube.dll';
procedure NewCube(o:byte); external 'cube.dll';
procedure DrawCube(o:byte);external 'cube.dll';
procedure BackCube(o:byte);external 'cube.dll';
procedure DelCube(o:byte); external 'cube.dll';
procedure DoneCube(o:byte);external 'cube.dll';
procedure SetCube(o:byte,n:byte); external 'cube.dll';
procedure BestCube(o:byte);external 'cube.dll';

Interface Cube 'CUBES' ('Построй свой полигон :)',,scInterface) EscClose, Cyan;
Show at (0,0,104,32);

TabbedSheet SysTabCube;
Screen  scrCube1 ' Игра ';
Buttons
cmC000;cmC001;cmC002;cmC003;cmC004;cmC005;cmC006;cmC007;cmC008;cmC009;cmC010;cmC011;cmC012;cmC013;cmC014;cmC015;cmC016;cmC017;cmC018;cmC019;
cmC020;cmC021;cmC022;cmC023;cmC024;cmC025;cmC026;cmC027;cmC028;cmC029;cmC030;cmC031;cmC032;cmC033;cmC034;cmC035;cmC036;cmC037;cmC038;cmC039;
cmC040;cmC041;cmC042;cmC043;cmC044;cmC045;cmC046;cmC047;cmC048;cmC049;cmC050;cmC051;cmC052;cmC053;cmC054;cmC055;cmC056;cmC057;cmC058;cmC059;
cmC060;cmC061;cmC062;cmC063;cmC064;cmC065;cmC066;cmC067;cmC068;cmC069;cmC070;cmC071;cmC072;cmC073;cmC074;cmC075;cmC076;cmC077;cmC078;cmC079;
cmC080;cmC081;cmC082;cmC083;cmC084;cmC085;cmC086;cmC087;cmC088;cmC089;cmC090;cmC091;cmC092;cmC093;cmC094;cmC095;cmC096;cmC097;cmC098;cmC099;
cmC100;cmC101;cmC102;cmC103;cmC104;cmC105;cmC106;cmC107;cmC108;cmC109;cmC110;cmC111;cmC112;cmC113;cmC114;cmC115;cmC116;cmC117;cmC118;cmC119;
cmC120;cmC121;cmC122;cmC123;cmC124;cmC125;cmC126;cmC127;cmC128;cmC129;cmC130;cmC131;cmC132;cmC133;cmC134;cmC135;cmC136;cmC137;cmC138;cmC139;
cmC140;cmC141;cmC142;cmC143;cmC144;cmC145;cmC146;cmC147;cmC148;cmC149;cmC150;cmC151;cmC152;cmC153;cmC154;cmC155;cmC156;cmC157;cmC158;cmC159;
cmC160;cmC161;cmC162;cmC163;cmC164;cmC165;cmC166;cmC167;cmC168;cmC169;cmC170;cmC171;cmC172;cmC173;cmC174;cmC175;cmC176;cmC177;cmC178;cmC179;
cmC180;cmC181;cmC182;cmC183;cmC184;cmC185;cmC186;cmC187;cmC188;cmC189;cmC190;cmC191;cmC192;cmC193;cmC194;cmC195;cmC196;cmC197;cmC198;cmC199;
cmC200;cmC201;cmC202;cmC203;cmC204;cmC205;cmC206;cmC207;cmC208;cmC209;cmC210;cmC211;cmC212;cmC213;cmC214;cmC215;cmC216;cmC217;cmC218;cmC219;
cmC220;cmC221;cmC222;cmC223;cmC224;cmC225;cmC226;cmC227;cmC228;cmC229;cmC230;cmC231;cmC232;cmC233;cmC234;cmC235;cmC236;cmC237;cmC238;cmC239;
cmC240;cmC241;cmC242;cmC243;cmC244;cmC245;cmC246;cmC247;cmC248;cmC249;cmC250;cmC251;cmC252;cmC253;cmC254;cmC255;cmC256;cmC257;cmC258;cmC259;
cmC260;cmC261;cmC262;cmC263;cmC264;cmC265;cmC266;cmC267;cmC268;cmC269;cmC270;cmC271;cmC272;cmC273;cmC274;cmC275;cmC276;cmC277;cmC278;cmC279;
cmC280;cmC281;cmC282;cmC283;cmC284;cmC285;cmC286;cmC287;cmC288;cmC289;cmC290;cmC291;cmC292;cmC293;cmC294;cmC295;cmC296;cmC297;cmC298;cmC299;
<<
 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

>>
end;
Screen  scrCube2 ' и... ';
Fields
  score1 : Protect;
  score2 : Protect;
Buttons
cmGame;
cmG001;cmG002;cmG003;cmG004;
<<
 Игра "галактический полигон" даёт шанс собрать неподетски большой результат, если в случайном нагромождении разглядеть
 тонкий ход фишки:). Первыми как всегда любители комбинировать детали в поисках целого.
 Коротко о правилах: полигоном назовём набор квадратов одного цвета со смежными сторонами и чем он крупнее, тем больше
 за него дают, примерно число квадратов в квадрате. Понятно, что строить и собирать полигоны можно пока есть квадраты.
 Поэтому максимум достигается на одном гигантском полигоне:).

 <.   Игра   .>                    Двойной клик или F7 новая раскраска
                                   Правый клик или F8 возврат раскраски предыдущего хода
                                   Левый клик или F3 очередной ход изменения раскраски удалением полигона

                                   Строка заголовка даёт текущий счёт, количества квадратов = синих, красных, зелёных,
                                   жёлтых и фиолетовых, = и количество квадратов / цену текущего полигона.


                  Выбор раскраски с лучшим результатом (премии за последние 3, 2, 1, 0 квадраты)
   1. счёт .@@@@@@                       2. счёт .@@@@@@
 <.·.>                                 <.·.>






 <.·.>                                 <.·.>

>>
end;
end;
HandleEvent
cmInit:   begin o:=TuneCube; if (o=0) PutCommand(cmClose) else PutCommand(cmQQQQ); end;
cmChangeTabbedSheetFormat: if (Target=scrCube1) PutCommand(cmGame) else PutCommand(cmBEST);
cmInsert: begin NewCube(o);  abort; exit; end;
cmDelete: begin BackCube(o); abort; exit; end;
cmPick:   begin DelCube(o);  abort; exit; end;
cmClose:  begin if (o<>0) DoneCube(o); end;
cmQQQQ:   begin NewCube(o);  end;
cmGame:   begin SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmC000:   DelCube(o);cmC001:   DelCube(o);cmC002:   DelCube(o);cmC003:   DelCube(o);cmC004:   DelCube(o);cmC005:   DelCube(o);
//...
cmG001:   begin SetCube(o,1); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmG002:   begin SetCube(o,2); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmG003:   begin SetCube(o,1); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmG004:   begin SetCube(o,2); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmBEST:   begin BestCube(o); end;
end;
End.
Результат - игруха (бухи оценят )):
Изображение
Изображение
Ну тут скорее топик о другом, вызов функции dll сам по себе ничем не примечателен. Приведи если не жаль код cube.dll, расскажи как отрисовку сделал, как картинки вставил. Отрисовка ведь из библиотеки идет напрямую в Галактику, т.е. это не ActiveX контрол пользовательский. Как меняется заголовок окна интерфейса. Вот это самое интересное.
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Re: Вызов функций внешней dll из випа

Сообщение ilshat »

Даешь LINES на випе!!!!
sensoft
Постоянный гость
Сообщения: 67
Зарегистрирован: 15 апр 2008, 16:48
Откуда: Череповец

Re: Вызов функций внешней dll из випа

Сообщение sensoft »

http://sites.google.com/site/svobodnyef ... 0100517.7z
про толк в извращениях я в курсе:)
Последний раз редактировалось sensoft 19 июл 2011, 14:55, всего редактировалось 1 раз.
LaaLaa

Re: Вызов функций внешней dll из випа

Сообщение LaaLaa »

Респект. Автор реально крут.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вызов функций внешней dll из випа

Сообщение m0p3e »

А был еще тетрис на випе от GalaxyFoe. :)
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Вызов функций внешней dll из випа

Сообщение KATZ »

sensoft
Впечатляет! Может, пора браться за задачи посерьезнее: редфокс анвипнуть или сервер АК отучить от АК? :smile:
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Вызов функций внешней dll из випа

Сообщение galover »

KATZ
+1. А еще vip отучить от лицензии, иногда нужно дома поработать
sensoft
Постоянный гость
Сообщения: 67
Зарегистрирован: 15 апр 2008, 16:48
Откуда: Череповец

Re: Вызов функций внешней dll из випа

Сообщение sensoft »

KATZ
интеграция с внешним оборудованием - хорошая тема, но для АК уже есть решение:)
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Вызов функций внешней dll из випа

Сообщение KATZ »

sensoft писал(а):для АК уже есть решение
И не одно. Но в паблик они не вышли. Впрочем, данный форум - не самое подходящее место обсуждать такие вопросы. Я же не всерьез предлагал этим заняться, а только называл как пример реально сложной задачи, успешное решение которой - высший программистский пилотаж.
LaaLaa

Re: Вызов функций внешней dll из випа

Сообщение LaaLaa »

Пример настолько понравился, что сделал для него ролик на YouTube
http://www.youtube.com/watch?v=0sLrlq6ti0g
Ответить