none
Utilisation avec VBA pour Excel, d'une dll écrite par moi avec Delphi 32 bits RRS feed

  • Question

  • J'ai écrit une dll pour saisie d'une date avec Delphi 32bits.

    Je l'utilise avec Delphi 32 bits, avec dBase 32 bits, et cela fonctionne. Cette dll en 16 bits fonctionne avec excel 2003.

    La version 32 bits de cette dll ne fonctionne pas avec Excel 2016.

    Je l'inclus dans une macro, et je la déclare de la manière suivante:

    Private Declare Function GetDatePas1 Lib "D:\utilisateurs\Gino\Documents\Mairie\Sces Techniques\Sces Techniques\Le_03_08_2016_a_07h_45\dateinf232.dll" () As String.

    Je l'appelle : Debut = GetDatePas1(), je choisis la date dans mon formulaire qui s'est affiché.

    Et là, excel redémarre car cet appel provoque un défaut sans doute de mémoire. En principe, je transmets par cette dll, une chaîne de caractères soit un String.

    Pouvez-vous m'aider?

    Merci d'avance.

    dimanche 7 août 2016 16:10

Toutes les réponses

  • Bonsoir.

    J'ai besoin d'aide pour utiliser avec VBA pour Excel une dll qui fonctionne avec cet appel avec un formulaire Delphi.

    Ci-dessous le code du formulaire Delphi avec lequel la dll fonctionne.

    unit EssaiDate;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        DateChoix: ShortString;
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    function GetDatePas1: PChar; external 'C:\Program Files\Borland\Delphi7\Projects\Dateinf232.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      DateChoix := GetdatePas1;
      Label1.Caption := DateChoix;
    end;

    end.

    Pouvez-vous m'aider à déclarer cette fonction avec VBA pour Excel, et à obtenir la valeur de retour sans défaut?

    J'ai essayé avec le type de variable String, défaut général et excel est obligé de fermer.

    Si je déclare :

    Private Declare Function GetDatePas1 Lib "C:\Program Files\Borland\Delphi7\Projects\dateinf232.dll" () As Date

    et Dim deb As Date

    deb = GetDatePas1

    J'obtiens le défaut Erreur d'exécution '16' "Expression trop complexe"

    Même erreur si je déclare Dim deb As String.

    En fait, cette erreur semble provenir du type de données Date déclaré pour la dll.

    Mais si je déclare String, Excel plante, doit fermer et redémarrer.

    Existe-t-il un équivalent de PChar en VBA? Et de ShortString?

    Je vous remercie par avance pour votre aide.

    lundi 8 août 2016 19:42
  • Bonjour,

    Est-ce que votre version d'Excel 2016 est bien 32 bits ?

    Si vous déclarez en Variant, est-ce que ça plante aussi.

    Je ne connais pas Delphi mais il semble avoir lu que qu'une variable déclarée PChar qui pointe vers un String peut être accédée via à tableau ou un String à longueur fixe, non ?

    Par exemple, nombreuses sont les API où l'on déclare un String et on lui affecte une série de NullChar (ou autre) pour le passer à la fonction...

    Exemple :

    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    
    Private Sub TestINI()
        Dim strBuffer As String, lngRet As Long
        strBuffer = String(255, 0)
        lngRet = GetPrivateProfileString("Test", "Clé", "Default", strBuffer, 255, "F:\MyIniFile.ini")
        If lngRet <> 0 Then
        strBuffer = Left$(strBuffer, lngRet)
        MsgBox strBuffer
    End Sub
    
    Voyez de ce côté là...


    Argy

    jeudi 11 août 2016 12:38
    Modérateur