Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 68969
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 10, 20262026-05-10T19:30:00+00:00 2026-05-10T19:30:00+00:00

I’ve had my first go at writing a DLL in Delphi. So far so

  • 0

I’ve had my first go at writing a DLL in Delphi. So far so good. By using a typelib I’ve been able to pass Widestrings to and from the DLL without difficulty.

What’s curious at the moment is that I’m using VB6 as the testbed, and every time I run a test within the IDE, the program runs and then the IDE process suddenly disappears from memory – no error messages, nothing. If I step through the code, everything works fine until I execute the last line, then the IDE disappears.

By contrast, when I compile the test to an EXE the program runs to its end, without error messages etc.

Has anyone had this problem before and is there an obvious solution that’s staring me in the face?

Source code below, in case it matters:

— project

library BOSLAD;  uses   ShareMem,   SysUtils,   Classes,   BOSLADCode in 'BOSLADCode.pas';  exports   version,   DMesg,   foo; {$R *.res}  begin end. 

— unit

unit BOSLADCode;  interface   function version() : Double; stdcall;   procedure DMesg(sText : WideString; sHead : WideString ); stdcall;   function foo() : PWideString; stdcall;  implementation   uses Windows;    function version() : Double;   var     s : String;   begin     result := 0.001;   end;    procedure DMesg( sText : WideString; sHead : WideString);   begin     Windows.MessageBoxW(0, PWideChar(sText), PWideChar(sHead), 0);   end;    function foo() : PWideString;   var s : WideString;   begin     s := 'My dog''s got fleas';     result := PWideString(s);   end; end. 

— typelib

 // This is the type library for BOSLAD.dll       [       // Use GUIDGEN.EXE to create the UUID that uniquely identifies       // this library on the user's system. NOTE: This must be done!!          uuid(0C55D7DA-0840-40c0-B77C-DC72BE9D109E),       // This helpstring defines how the library will appear in the       // References dialog of VB.          helpstring('BOSLAD TypeLib'),       // Assume standard English locale.          lcid(0x0409),       // Assign a version number to keep track of changes.          version(1.0)       ]       library BOSLAD       {        // Now define the module that will 'declare' your C functions.       [          helpstring('Functions in BOSLAD.DLL'),          version(1.0),       // Give the name of your DLL here.          dllname('BOSLAD.dll')       ]       module BOSLADFunctions       { [helpstring('version'), entry('version')] void __stdcall version( [out,retval] double* res ); [helpstring('DMesg'), entry('DMesg')] void __stdcall DMesg( [in] BSTR msg, [in] BSTR head ); [helpstring('foo'), entry('foo')] void __stdcall foo( [out,retval] BSTR* msg );       } // End of Module       }; // End of Library 

I moved the declaration of the WideString outside of the function in which I had declared it, in the expectation that that would increase the lifetime of the variable to longer than just the lifetime of the foo function. It made no difference whatsoever.

Likewise I commented out of the VB6 the call to the foo function. That made no difference either. No matter what I do, VB6 IDE dies after the last line of code is executed.

Something apart from pointers to local variables is the cause. But what?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-10T19:30:00+00:00Added an answer on May 10, 2026 at 7:30 pm

    To elaborate on GSerg’s answer:

    result := PWideString(s); 

    you’d think it would be ok because s was initialized with a string literal… but wide strings in Delphi are not reference counted like normal strings, so s actually holds a bit of dynamically allocated heap memory, and as soon as the function returns this memory can be reused 🙁

    The following should be ok though:

    function foo() : PWideString; const s : WideString = 'My dog''s got fleas'; begin   result := PWideString(s); end; 
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 69k
  • Answers 69k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • added an answer The ConvertAll equivalent in extension methods for Linq is called… May 11, 2026 at 12:38 pm
  • added an answer Not sure what can be causing that, but have you… May 11, 2026 at 12:38 pm
  • added an answer Look at the System.Diagnostics.StackFrame class. StackFrame frame = new StackFrame(1);… May 11, 2026 at 12:38 pm

Related Questions

I keep getting tasks that are above my skill level. How can I address this without coming accross as grossly incompetent?
I have a web-service that I will be deploying to dev, staging and production.
I'm thinking of starting a wiki, probably on a low cost LAMP hosting account.
I have the following tables in my database that have a many-to-many relationship, which
I'm using the RESTful authentication Rails plugin for an app I'm developing. I'm having
I am currently running into a problem where an element is coming back from
Seemingly simple, but I cannot find anything relevant on the web. What is the
Configuring TinyMCE to allow for tags, based on a customer requirement. My config is
Is it possible to replace javascript w/ HTML if JavaScript is not enabled on
Which graduate program should I choose – SUNY Buffalo or SUNY Binghamton?

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.