Help!!! Multi-Platform DLL Integration with Delphi

I work in a multi-platform development environment and NEED to be able to share functionality between:
      Delphi 2.0/3.0
      Clarion 2.0
      Visual Basic 4.0/5.0
      Visual FoxPro 5.0

Our development team has experts in each of these platforms.  We want to be able to share particular functions developed in one platform with the ALL ot the other platforms. Through the use of DLLs, we want to be able call a function, pass it parameters, have it act upon the parameters, and return a result, and potentially modify the input parameters.

This process sounds VERY simple in theory (every development platform's manuals make it sound soooo easy), but, in fact, we have had "limited successes".

I know that everyone has their "Favorite" platform, but has anyone successfully demonstrated that what I describe is possible.

ANY SAMPLE CODE/DLLS THAT DEMONSTRATES ANY OF THE ABOVE PLATFORMS WORKING TOGETHER WOULD GREATLY BE APPRECIATED.  Please include any instructions and specifics, such as compiler directive, additional support DLLS, yadayadaya...

I don't mean to be blunt, BUT!!!  If you have not actually been successful with what I have described above, please don't speculate.
jlmAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

kangadruCommented:
First of all, the DLL's need to be written in either Delphi or C/C++ using stdcall.  Next, you can NEVER use pascal strings as params in the calling conventions.  All strings must be passed as PCHAR, ByVal in VB.  PCHAR is roughly equal to CSTR or CHAR in C/C++.  Below you will find both the code for a Delphi DLL and the code for a corresponding VB call to it.  This is tested code, so if you have problems following it please feel free to ask.The same basic code is usable in Visual FoxPro.  I have never used Clarion, but I suspect that it's DLL calling conventions are very similarAndyDelphi DLL (kdExt.dll) - Preferably in the Windows System dir.library kdExt;

uses
  Forms,
  classes,
  dialogs,
  windows,
  registry,
  sysutils,
  uSplash in 'uSplash.pas' {frmSplash},
  uRegister in 'uRegister.pas' {frmRegister},
  uEnterpas in 'uEnterpas.pas' {frmRegEnter};

{$R *.RES}

var
  frmSplash   : TfrmSplash;
  frmRegister : TfrmRegister;

procedure ShowSplashScreen; stdcall; export;
  begin
    frmSplash := TfrmSplash.Create(Application);
    frmSplash.Show;
  end;

procedure FreeSplashScreen; stdcall; export;
  begin
    frmSplash.Free;
  end;

procedure SplashSetAction(szAction : pchar); stdcall; export;
  begin
    frmSplash.pnlAction.Caption := string(szAction);
  end;

function DisplayRegistration: integer;  stdcall; export;
  begin
    frmRegister := TfrmRegister.Create(Application);
    result := frmRegister.ShowModal;
    frmRegister.Free;
  end;

exports
  ShowSplashScreen,
  FreeSplashScreen,
  DisplayRegistration,
  SplashSetAction;

begin
  // hide the froms created in the DLL from the Task Bar
  IsLibrary := True;
  Application.CreateHandle;
  ShowWindow(Application.Handle, SW_HIDE);
  Application.ShowMainForm := FALSE;
end.VB Code - Module to define the DLL callsDeclare Sub ShowSplashScreen Lib "kdExt.dll" ()
Declare Sub SplashSetAction Lib "kdExt.dll" (ByVal action As String)
Declare Sub FreeSplashScreen Lib "kdExt.dll" ()


VB Code Calling the DLL Private Sub Command1_Click()
  ShowSplashScreen
  SplashSetAction ("Loading")
End Sub

Private Sub Command2_Click()
  FreeSplashScreen
End Sub
Andy
0
icampbe1Commented:
I have done this in a similar environment.  First of all if you are working completely in a 32bit platform environment, its just a matter of calling conventions.  Thats no big deal for an experienced coder.  

If you must cross platform between 16 and 32 bit, don't bother trying thunking.  The more 'current' practice is to use COM.  It was developed for exactly what you want.  If you need to come up to speed on this, I would begin with a good understanding of OLE Automation  (NOT OLE Linking and Embeding).  You build the equivalent of DLLs but they contain COM objects which are all callable from EVERYONE!

Even the platform can be ignored because of the 'Marshalling' that takes place for the call.   If I understand your question correctly, this is the corrent answer.

Ian C.

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
icampbe1Commented:
Thanks for grading me.  You might also want to keep in mind that there is a WM_CopyData windows message designed for inter-platform messages.  It automatically adjusts the handles and buff addresses to be correct across platforms.

Cheers,
Ian C.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.