Download Pelles C here: http://www.pellesc.se
Quote from: John Z on May 02, 2026, 04:48:07 PMWell I'm far from an expert but I have used a dll in a program.Many thanks for your detailed explanation. I will try.
basically the use follows this:
1)LoadLibrary: Loads the DLL into memory.
2)repeat GetProcAddress: Get a pointers to the exported functions.
3)use the functions:
4)FreeLibrary: Unloads the DLL when done.
A quick web example where the dll contains 1 function:
__declspec(dllexport) int Add(int a, int b) {return a + b};
some code excerpts from one of my actual programs
Hopefully helpful, at least a start -
John Z
// LoadDLL.c
#include <windows.h>
#include <stdio.h>
typedef int (*AddFunc)(int, int);
int main() {
HMODULE hDll = LoadLibrary(TEXT("ExampleDLL.dll"));
if (hDll == NULL) {
printf("Failed to load DLL. Error: %d\n", GetLastError());
return 1;
}
AddFunc add = (AddFunc)GetProcAddress(hDll, "Add");
if (add == NULL) {
printf("Failed to get function. Error: %d\n", GetLastError());
FreeLibrary(hDll);
return 1;
}
int result = add(2, 3);
printf("2 + 3 = %d\n", result);
FreeLibrary(hDll);
return 0;
}
// Load the dll
swprintf(p_DllFile,260,L"%ls%ls",p_appdir, L"libxlsxio_write64.dll" );
hXlsxLib = LoadLibrary(p_DllFile);
if (hXlsxLib == NULL)
{ MessageBoxA(NULL,"Can't export because the DLL is missing.","XLSX Export",MB_OK|MB_ICONERROR);
return;
}
// get the functions
/* set up DLL procs */
(FARPROC) add_cell_datetime = GetProcAddress(hXlsxLib,"xlsxiowrite_add_cell_datetime") ;
(FARPROC) add_cell_float = GetProcAddress(hXlsxLib,"xlsxiowrite_add_cell_float") ;
(FARPROC) add_cell_int = GetProcAddress(hXlsxLib,"xlsxiowrite_add_cell_int") ;
(FARPROC) add_cell_string = GetProcAddress(hXlsxLib,"xlsxiowrite_add_cell_string") ;
(FARPROC) add_column = GetProcAddress(hXlsxLib,"xlsxiowrite_add_column") ;
(FARPROC) write_close = GetProcAddress(hXlsxLib,"xlsxiowrite_close") ;
(FARPROC) get_version = GetProcAddress(hXlsxLib,"xlsxiowrite_get_version") ;
(FARPROC) get_version_string = GetProcAddress(hXlsxLib,"xlsxiowrite_get_version_string") ;
(FARPROC) next_row = GetProcAddress(hXlsxLib,"xlsxiowrite_next_row") ;
(FARPROC) write_open = GetProcAddress(hXlsxLib,"xlsxiowrite_open") ;
(FARPROC) set_detection_rows = GetProcAddress(hXlsxLib,"xlsxiowrite_set_detection_rows") ;
(FARPROC) set_row_height = GetProcAddress(hXlsxLib,"xlsxiowrite_set_row_height") ;
// use the exported function
.....
// finally clean up
// release DLL
FreeLibrary(hXlsxLib) ;
Quote from: John Z on May 02, 2026, 10:35:03 AMHi ander_cc,I see, thank you very much! I find the dll. But how to use it?
There are two windows system dll's that might help -
C:\windows\system32\winsqlite3.dll
and
C:\windows\SysWOW64\winsqlite3.dll
John Z
// Source code by ChatGPT
#include <windows.h>
#include <stdio.h>
#include "LiteZip.h"
void AddFolder(HZIP hz, const char *basePath, const char *relPath)
{
char search[MAX_PATH];
WIN32_FIND_DATAA fd;
HANDLE hFind;
sprintf(search, "%s\\%s\\*", basePath, relPath);
hFind = FindFirstFileA(search, &fd);
if (hFind == INVALID_HANDLE_VALUE)
return;
do
{
if (strcmp(fd.cFileName, ".") == 0 ||
strcmp(fd.cFileName, "..") == 0)
continue;
char fullPath[MAX_PATH];
char zipPath[MAX_PATH];
sprintf(fullPath, "%s\\%s\\%s", basePath, relPath, fd.cFileName);
if (relPath[0])
sprintf(zipPath, "%s\\%s", relPath, fd.cFileName);
else
sprintf(zipPath, "%s", fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
AddFolder(hz, basePath, zipPath);
}
else
{
printf("Adding: %s\n", zipPath);
ZipAddFileA(hz, zipPath, fullPath);
}
} while (FindNextFileA(hFind, &fd));
FindClose(hFind);
}
int main(void)
{
HZIP hz;
if (ZipCreateFileA(&hz, "archive.zip", 0) != 0)
{
printf("Cannot create ZIP\n");
return 1;
}
AddFolder(hz, "C:\\testfolder", "");
ZipClose(hz);
printf("Done.\n");
return 0;
}
Page created in 0.067 seconds with 15 queries.