From WikiChip
Editing mirc/dynamic-link library

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

This page supports semantic in-text annotations (e.g. "[[Is specified as::World Heritage Site]]") to build structured and queryable content provided by Semantic MediaWiki. For a comprehensive description on how to use annotations or the #ask parser function, please have a look at the getting started, in-text annotation, or inline queries help pages.

Latest revision Your text
Line 44: Line 44:
 
* '''nopause''' - This Bool value is TRUE if mIRC is in a critical routine, meaning that you must not stop the processing in mIRC (long while loop for example).
 
* '''nopause''' - This Bool value is TRUE if mIRC is in a critical routine, meaning that you must not stop the processing in mIRC (long while loop for example).
  
 +
Both 'data' and 'params' are allocated with the Line Length Limit of mIRC, you can pass exactly $maxlenl+100 characters, 10340 characters as of mIRC 7.72, meaning the double in term of bytes because of utf16.
  
If you call a non unicode dll with mIRC being unicode, mIRC must call the prototype with a char * and will convert its utf16 to utf8, and whenever this happens in mIRC, the data is chopped at $maxlenl+100 bytes.
+
If you call a non unicode dll with mIRC being unicode, mIRC must call the prototype with a char * and will convert the utf16 to utf8 but 'data' and 'parms' will still be allocated with ($maxlenl+100)*2 bytes.
  
Both 'data' and 'params' are allocated with a number of bytes that is close to ($maxlenl+100)*2+N where N is 100 or a bit more, and this is true both unicode and non unicode mode. This effectively mean that you can write that many bytes into the buffer yourself in both mode.
 
  
 
These functions must use the [[stdcall calling convention]]. (This is also the standard calling convention for all other [[Microsoft]] [[Win32 API]] functions.)
 
These functions must use the [[stdcall calling convention]]. (This is also the standard calling convention for all other [[Microsoft]] [[Win32 API]] functions.)
Line 101: Line 101:
 
* '''mHwnd''' - Contains the window handle to the main mIRC window.
 
* '''mHwnd''' - Contains the window handle to the main mIRC window.
 
* '''mKeep''' - Is set to TRUE by default, indicating that mIRC will keep the DLL loaded after the call. You can set mKeep to FALSE to make mIRC unload the DLL after the call
 
* '''mKeep''' - Is set to TRUE by default, indicating that mIRC will keep the DLL loaded after the call. You can set mKeep to FALSE to make mIRC unload the DLL after the call
* '''mUnicode''' - If set to true, indicates that the dll is using unicode as opposed to ansi (default). This means the data passed from/to the dll is in UTF16 (see above with TCHAR type instead of CHAR). If set to false, mIRC will convert utf16 to utf8 to comply with the CHAR type prototype of the function
+
* '''mUnicode''' - If set to true, indicates that the dll is using unicode as opposed to ansi (default). This means the data passed from/to the dll is in UTF16 (see above with TCHAR type instad of CHAR). If set to false, mIRC will convert utf16 to utf8 to comply with the CHAR type prototype of the function
 
* '''mBeta''' - contains the mIRC $beta version number, for public betas.
 
* '''mBeta''' - contains the mIRC $beta version number, for public betas.
 
* '''mBytes''' - as of v7.64 contains the max safe byte length that can be placed into the 'data' and 'parms' buffers. This is always the double of the line length limit even when converting to utf8 with non unicode dll.
 
* '''mBytes''' - as of v7.64 contains the max safe byte length that can be placed into the 'data' and 'parms' buffers. This is always the double of the line length limit even when converting to utf8 with non unicode dll.
 +
 +
 +
While SendMessage can be used to place a string into the DATA buffer, it has a smaller length limit, which appears to be a character limit separate from a byte limit. Even though the size of the DATA buffer is based on a $maxlenl that's greater than 8192, as of v7.72 using SendMessage to request a string which is longer than 8192 characters results in delivering the null string. But a string having fewer than 8192 characters but more than 8192 bytes is delivered.
  
 
== Unloading the Dll ==
 
== Unloading the Dll ==
Line 223: Line 226:
 
Use $dll(yourdll.dll,simple_example,) which will return "simple string".
 
Use $dll(yourdll.dll,simple_example,) which will return "simple string".
  
Use $dll(yourdll.dll,average_example,) or '/dll yourdll.dll average_example', this will execute "/echo -a è" in mIRC 7.x, because the project is not unicode, the two bytes è are sent as ascii, mIRC 7.x will correctly decode that as utf8. On mIRC 6.x (you would need to remove the mUnicode to mBytes variable in the LOADINFO structure), this would display the two bytes.
+
Use $dll(yourdll.dll,average_example,) or '/dll yourdll.dll average_example', this will execute "/echo -a è" in mIRC 7.x, because the project is not unicode, the two bytes è are sent as ascii, mIRC 7.x will correctly decode that as utf8. On mIRC 6.x (you would need to remove the mUnicode variable in the LOADINFO structure), this would display the two bytes.
  
 
If you set the mUnicode variable to TRUE on mIRC 7.x in the LoadDll function and if you set your project to use unicode (in visual studio: project properties > configuration properties > general > character set), this would correctly show the two bytes as well.
 
If you set the mUnicode variable to TRUE on mIRC 7.x in the LoadDll function and if you set your project to use unicode (in visual studio: project properties > configuration properties > general > character set), this would correctly show the two bytes as well.

Please note that all contributions to WikiChip may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see WikiChip:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)