summaryrefslogtreecommitdiff
path: root/apps/windoze/CBuilder4/UninstCust/CoolTools.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'apps/windoze/CBuilder4/UninstCust/CoolTools.cpp')
-rw-r--r--apps/windoze/CBuilder4/UninstCust/CoolTools.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/apps/windoze/CBuilder4/UninstCust/CoolTools.cpp b/apps/windoze/CBuilder4/UninstCust/CoolTools.cpp
new file mode 100644
index 0000000..451aa35
--- /dev/null
+++ b/apps/windoze/CBuilder4/UninstCust/CoolTools.cpp
@@ -0,0 +1,55 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#include <dos.h>
+#pragma hdrstop
+//---------------------------------------------------------------------------
+// Important note about DLL memory management when your DLL uses the
+// static version of the RunTime Library:
+//
+// If your DLL exports any functions that pass String objects (or structs/
+// classes containing nested Strings) as parameter or function results,
+// you will need to add the library MEMMGR.LIB to both the DLL project and
+// any other projects that use the DLL. You will also need to use MEMMGR.LIB
+// if any other projects which use the DLL will be perfomring new or delete
+// operations on any non-TObject-derived classes which are exported from the
+// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
+// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,
+// the file BORLNDMM.DLL should be deployed along with your DLL.
+//
+// To avoid using BORLNDMM.DLL, pass string information using "char *" or
+// ShortString parameters.
+//
+// If your DLL uses the dynamic version of the RTL, you do not need to
+// explicitly add MEMMGR.LIB as this will be done implicitly for you
+//---------------------------------------------------------------------------
+USERES("CoolTools.res");
+//---------------------------------------------------------------------------
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
+extern "C" {
+
+DWORD APIENTRY __export launchAndWait(LPCSTR cmdLine, LPCSTR workDir) {
+ STARTUPINFO StartupInfo;
+ PROCESS_INFORMATION ProcessInformation;
+ DWORD ExitCode = -1;
+
+ GetStartupInfo(&StartupInfo);
+ if (CreateProcess(NULL, (char *)cmdLine, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, workDir, &StartupInfo, &ProcessInformation)) {
+ do {
+ _sleep(1);
+ GetExitCodeProcess(ProcessInformation.hProcess, &ExitCode);
+ } while (ExitCode == STILL_ACTIVE);
+ }
+ else {
+ LPVOID lpMsgBuf;
+ FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
+ MessageBox(NULL, (const char *)lpMsgBuf, "Error", MB_OK|MB_ICONINFORMATION);
+ LocalFree(lpMsgBuf);
+ }
+ return ExitCode;
+}
+
+} \ No newline at end of file