Ako prejsť reťazec medzi Visual Basic a vašom C DLL

Preklady článku Preklady článku
ID článku: 187912 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Pri vytváraní c dynamic-link library (DLL) na použitie s programom Visual Basic ho je dôležité si zapamätať, že c a Visual Basic zaobchádzať reťazce odlišne. Musí prijať všetky preventívne opatrenia na zabezpečenie, že všetky struny prechádzajú správne; v opačnom prípade sa môže vyskytnúť kritická chyba. Tento článok vám ukáže ako napísať C DLL, ktorá trvá reťazec ako parameter funkcie, a ako volať funkciu vyvážaných z aplikácie Visual Basic.

DALSIE INFORMACIE

S cieľom rozvíjať vaše C DLL, je dôležité vedieť, ako Visual Basic kľučky reťazce interne poznať ako bude postúpená vaše Funkcie knižnice DLL. Najviac c funkcie očakávať reťazec byť zakončený, Pole znakov ASCII. Ale Visual Basic používa reťazec typovo bezpečný automatizácie nazýva BSTR. Na platforme Win32 BSTR je dlhá smerník na pridelené pamäte štruktúra, ktorá obsahuje reťazec znakov Unicode a 32- bitové celé číslo prefix, ktoré obsahuje dĺžku reťazca.

Väčšina tento rozdiel môže ignorovaná, pretože Visual Basic bude automaticky konvertovať akékoľvek Unicode BSTRs ASCII pred absolvovanie im externé funkcie. Problém však je s parametrom, sama. Autor: Predvolene program Visual Basic prechádza všetky premenné odkazom, vrátane reťazce. Pretože BSTR premenná je smerník na reťazec, keď prejde Visual Basic to odkazom je to skutočne obiehanie ukazovateľa na ukazovateľ na reťazec. Najviac c funkcie jednoducho očakávať smerník na reťazec (napríklad ukončený nulou LPSTR).

Vytvorenie vašom C DLL: Podrobný príklad

  1. Otvorte Visual C++ 5.0 a kliknite na položku Nový v ponuke Súbor. Na karte projektov Vyberte "Win32 Dynamic-Link Library" a názov projektu „StrSamp. ”
  2. Opäť kliknite na položku Nový v ponuke Súbor a vyberte "C ++ zdrojový súbor." Na karte súbory Pomenujte súbor "StrSamp.c" a stla?te OK.
  3. Zopakujte kroky 2 a tejto dobe vybrať "Textový súbor" ako typ súboru. programu súbor "StrSamp.def", a stla?te OK.
  4. Ďalej pridať nasledujúci kód do "StrSamp.c:"
          #include <windows.h>
    
          void __stdcall DisplayStringByVal(LPCSTR pszString)
          {
             //pszString is a pointer to a string
             MessageBox(NULL, pszString, "Display String ByVal",
                       MB_OK | MB_ICONINFORMATION);
          }
    
          void __stdcall DisplayStringByRef(LPCSTR* ppszString)
          {
             //ppszSting is a pointer to a pointer to a string
             MessageBox(NULL, *ppszString, "Display String ByRef",
                       MB_OK | MB_ICONINFORMATION);
          }
    
             void __stdcall FillString(LPSTR pszString, LONG cSize)
          {
             // Create a temp buffer with our string
             char buffer[] = "Hello from the C DLL!";
    
             // Copy our temp string to pszString
             // but check the size to make sure we have a buffer
             // big enough to hold the entire string.
             if (cSize > strlen(buffer))
                strcpy(pszString, buffer);
          }
    
          int __stdcall InStrRev(LPCSTR pszString, short iChar)
          {
             // This function is similar to Visual Basic's InStr function
             // except that it searches for the given ASCII character from
             // right to left, returning the character position of the
             // last occurrence (rather than the first) of the character
             // in the string.
             char* pszTmp;
             int nRet = 0;
    
             // Scan for iChar in pszString backwards
             pszTmp = strrchr(pszString, (int)iChar);
             if(pszTmp != NULL)
                nRet = pszTmp - pszString + 1;
    
             return nRet;
          }
    
    					
  5. Chcete, aby funkcie exportovateľné, pridajte nasledujúce "StrSamp.def:"
          LIBRARY StrSamp
          DESCRIPTION 'Microsoft KB Sample DLL'
          EXPORTS
             DisplayStringByVal
             DisplayStringByRef
             FillString
             InStrRev
    
    					
  6. Kompiluje vaša knižnica DLL z menu stavať. Keď kompletné, kopírovať novej knižnice DLL do adresára programu Visual Basic na testovanie.

VB Test uplatnenie: Podrobný príklad

  1. Vytvoriť štandardné projektu v programe Visual Basic a nazvite ho „StrTest. ” Form1 sa vytvorí na základe predvoleného nastavenia.
  2. Pridajte tri CommandButtons Form1.
  3. V okne kód pre Form1 pridať nasledujúce všeobecné Vyhlásenia sekcia:
          Option Explicit
    
          Private Declare Sub DisplayStringByRef Lib "StrSamp.dll" _
             (sMyString As String)
          Private Declare Sub DisplayStringByVal Lib "StrSamp.dll" _
             (ByVal sMyString As String)
          Private Declare Sub FillString Lib "StrSamp.dll" _
             (ByVal sMyString As String, ByVal cBufferSize As Long)
          Private Declare Function InStrRev Lib "StrSamp.dll" _
             (ByVal sMyString As String, ByVal iChar As Integer) _
             As Long
    
    					
    Všimnite si, že väčšina z struny sú vyhlásené za ByVal. Neznamená to že tieto struny sú absolvovanie podľa hodnoty; skôr sú absolvovanie hodnota premennej BSTR hodnotou (nezabudnite, že BSTR premenná je ukazovateľ na reťazec). Takže ByVal slovo má účinnosť prechádzajúcom dlhé ukazovateľ na reťazec ukončený nulou (LPSTR) len čo c funkcie očakávať.

  4. Pridajte nasledujúci kód kliknite na položku udalosti pre každý CommandButtons:
          Private Sub Command1_Click()
             Dim sTestString1 As String
             Dim sTestString2 As String
    
             sTestString1 = "This is my string passed to the dll by value."
             DisplayStringByVal sTestString1
    
             sTestString2 = "This is my string passed to the dll by reference."
             DisplayStringByRef sTestString2
    
          End Sub
    
          Private Sub Command2_Click()
             Dim sFillTest As String
    
             sFillTest = Space$(260)
             FillString sFillTest, 260
             MsgBox Trim$(sFillTest), vbInformation, "Fill String"
          End Sub
    
          Private Sub Command3_Click()
             Dim sPathString As String
             Dim sMsg As String
             Dim lCharPosition As Long
    
             sPathString = "C:\My Documents\Temp\Item.txt"
             lCharPosition = InStrRev(sPathString, Asc("\"))
    
             If CBool(lCharPosition) Then
                sMsg = "The file '" & Mid$(sPathString, lCharPosition + 1)
                sMsg = sMsg & "' is at this location:" & vbCrLf & vbCrLf
                sMsg = sMsg & Left$(sPathString, lCharPosition - 1)
                MsgBox sMsg, vbInformation, "InStrRev"
             Else
                MsgBox "Cannot find '/' in " & sPathString, vbCritical
            End If
    
          End Sub
    
    					
  5. Stlačte kláves F5 na spustenie projektu programu Visual Basic v IDE.

    Poznámka: Ak sa zobrazí chybové hlásenie, môže byť pretože Visual Basic nedá sa nájsť vaše DLL. Uistite sa, že ste ju skopírovali na Visual Basic adresár pred spustením aplikácii testu.

ODKAZY

Podrobné informácie o tom, ako vytvoriť C DLL a používať ho v vizuálnej Základné, prečítajte si nasledujúci článok:
"DLL pre začiatočníkov" knižnice Microsoft Developer Network (MSDN) "VB5DLL.DOC"nachádza na disku CD-ROM 5.0 Visual Basic v"Tools\Docs" adresár.

Ďalšie informácie, prečítajte si nasledujúci článok v Microsoft Knowledge Base:
142840: Požiadavky Visual Basic pre vyvážané DLL funkcie

Vlastnosti

ID článku: 187912 - Posledná kontrola: 19. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Kľúčové slová: 
kbapi kbdll kbhowto kbmt KB187912 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:187912

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com