Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

Использование DLL написанной на С++   Найти похожие ветки 

 
Ricko ©   (2004-11-25 16:47) [0]

Срочно понадобилось управлять микшером звуковой карты ECHO MIA. Управление стандартным микшером она (карта) обходит используя свою консоль управления. Нашел в инете пример на с++ . Так как я абсолютно не разбираюсь в с++ решил запихать основные функции в dll, а уж в своем приложении на Delphi их использовать. Но при передачи значения параметров функций в Delphi не соответствуют значениям параметрам в dll. Вместо них какой то мусор. Знатоки с++ укажите на ошибки.

bmix.cpp ->

#include <vcl.h>
#include "CSplunge.h"
#include "CSplungeList.h"
#pragma hdrstop
//----------
USEUNIT("CSplunge.cpp");
USEUNIT("CSplungeList.cpp");
//----------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
       return 1;
}
//----------

CSplungeList *pSplungeList;
CSplunge *pSplunge;

__declspec(dllexport) int InitMyMixer(void)
{
pSplungeList = new CSplungeList;
if (0 == pSplungeList->GetNumSplunges())
{
        delete pSplungeList;
        return 0;
}

pSplunge = pSplungeList->GetNthSplunge(0);
pSplunge->OpenDriver();
pSplunge->OpenMixer();

return 42;
}

__declspec(dllexport) int CloseMyMixer(void)
{
     delete pSplungeList;
return 0;
}

__declspec(dllexport) char *GetCardName(void)
{
if (pSplungeList)
{
   ECHOGALS_CAPS *pCaps = pSplunge->GetCaps();
          return pCaps->szName;
}
return "None";
}

__declspec(dllexport) int GetVolume(Word iBus0,Word iBus1)
{
        int iGain;
        ShowMessage("Input param> iBus0: "+IntToStr(iBus0)
                  +"iBus1: "+IntToStr(iBus1));
        pSplunge->GetMonitorGain(iBus0,iBus1,iGain);
        return iGain;
}

__declspec(dllexport) int GetMute(Word iBus0,Word iBus1)
{
        int iGain;
        ShowMessage("Input param> iBus0: "+IntToStr(iBus0)
                  +"iBus1: "+IntToStr(iBus1));
        pSplunge->GetMonitorMute(iBus0,iBus1,iGain);
        ShowMessage("Get mute: "+IntToStr(iGain));
        return iGain;
}

__declspec(dllexport) int SetVolume(Word iBus0,Word iBus1, int iGain)
{
        pSplunge->SetMonitorGain(iBus0,iBus1,iGain);
        return 0;
}

__declspec(dllexport) int SetMute(Word iBus0,Word iBus1, int iMute)
{
        BOOL b;
        ShowMessage("Set mute: "+IntToStr(iMute));
        if (iMute == 0)  b=false; else b=true;
        pSplunge->SetMonitorMute(iBus0,iBus1,b);
        return 0;
}


main.pas

var
 Form1: TForm1;

 function InitMyMixer : integer; external "bmix.dll" name "@InitMyMixer$qv";
 function CloseMyMixer : integer; external "bmix.dll" name "@CloseMyMixer$qv";

 function GetCardName : PChar; external "bmix.dll" name "@GetCardName$qv";

 function GetVolume(bus0,bus1:word):integer; external "bmix.dll" name "@GetVolume$qusus";
 function GetMute(bus0,bus1:word):integer; external "bmix.dll" name "@GetMute$qusus";

 function SetVolume(bus0,bus1:word;Gain:integer):integer; external "bmix.dll" name "@SetVolume$qususi";
 function SetMute(bus0,bus1:word; Mute:integer):integer; external "bmix.dll" name "@SetMute$qususi";


 
Digitman ©   (2004-11-25 16:56) [1]

соглашения о вызовах тобой явно нарушены.

не бурусь утверждать, но либо stdcall (наиболее вероятно) либо cdecl (менее вероятно)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
4-1099146087
IronRat
2004-10-30 18:21
2004.12.12
FileMapping


14-1101020589
Sour
2004-11-21 10:03
2004.12.12
SMTP и POP3 серверы


1-1101818391
Chlavik
2004-11-30 15:39
2004.12.12
ActiveX - правильно обьявлены функции ???


1-1101245708
CepJaNT
2004-11-24 00:35
2004.12.12
TreeView


1-1101838448
Ермак
2004-11-30 21:14
2004.12.12
Всплывающая подсказка ТОЛЬКО в StatusBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский