ÎÊÌâ: C#³ÌÐòÀïÃæ¿ÉÒÔÊÕµ½C³ÌÐò´«À´µÄÊý¾Ý°ü.µ«ÊÇÿ´ÎÖ»ÓÐÒ»¸öBYTE.ÎÞÂÛC³ÌÐòÀïÃæÊý¾Ý°ü³¤¶È´óСÊǶàÉÙ.
·½°¸:
ÏòC³ÌÐò´«µÝÒ»¸öº¯ÊýÖ¸Õë(C#ÖÐΪίÍÐ)¹ýÈ¥¡£
C#ÀïÃæ¶¨ÒåÒ»¸öÏìÓ¦Êý¾Ý°üµÄ·½·¨£¬½«´Ë·½·¨·â×°ÔÚίÍÐÖУ¬´«¸øC³ÌÐò£¬
C³ÌÐòÄÇÀïÊÕµ½Êý¾Ý°üʱ¼´¿Éµ÷Óø÷½·¨¡£
C#Æô¶¯CµÄ·þÎñ-->C#ÏòC³ÌÐò×¢²áº¯ÊýÖ¸Õë-->C·þÎñÔÚÊʵ±µÄʱºò»Øµ÷C#×¢²áµÄ¸Ã·½·¨
C#³ÌÐò
public delegate void dele_newPacket(Byte[] packet);
public static void newPacket(Byte[] packet)
{}
[DllImport("Win32-Server-DLL.dll", EntryPoint = "start_delegate")]
public static extern void start_delegate(dele_newPacket packet);
CS_Console_1.Program.dele_newPacket packet = CS_Console_1.Program.newPacket;
CS_Console_1.Program.start_delegate(packet);
C´úÂë:
void (_stdcall *dele_func)(BYTE* );//È«¾Ö±äÁ¿
void start_delegate(void(_stdcall *start_address )( BYTE* ) )
{
printf("start_delegate call start:\n");
dele_func = start_address;
(*dele_func)((BYTE*)packet);//packet×ÊÇ1024BYTE
printf("start_delegate call end:\n");
}
Ö»ÒªÊý¾Ý°üÕýÈ·´«ÈëC#³ÌÐò¾Í¿ÉÒÔÁË,ÔÚC#ÀïÃæ½øÐÐÊý¾Ý°ü´¦Àí. Çë°ïæ°¡.
Ïà¹ØÎÊ´ð£º
µØµãÔÚÉîÛÚÄÏɽ
¡¡¡¡×öCÈí¼þ¡£ÊÔÓÃ2K£¬²»ÖªµÀתÕý¸ø¹«Ë¾Ì¸¶àÉÙºÏÊʰ¡£¿
¡¡¡¡ÁíÍ⣬±¾ÈËС±¾£¬Ó¢ÓïÁù¼¶£¬ÊÔÓÃÈý¸öÔ±íÏÖµÃÒ²ËãÖÐÉÏˮƽ¡£µ«ÊÇÏÖÔÚ»¹²»ÄÜ×öÏîÄ¿¡£ÁíÍâ±ÏҵѧУûÓÐÃûÆø¡£
¡¡¡¡×ªÕý¸ø¹«Ë¾Ì¸¶àÉ ......
ΪʲôCдµÄDLLÎļþC¡¢PBÄܵ÷ÓÃVB²»Äܵ÷Óã¿
VBÀïΪʲôÓеÄDLLÖ±½Óͨ¹ýÒýÓÿÉÒÔʹÓã¿ÓеÄÐèҪͨ¹ýdeclareÉêÃ÷Íⲿº¯Êý£¿ÕâЩDLLÓÐʲô²î±ð£¿
1¡¢ÎªÊ²Ã´PBÄÜͨ¹ýDECLAREÉùÃ÷¶øVB²»ÐУ¿
2¡¢Èç¹ûÕâ¸ödllÖÐµÄ ......
ÎÒÓÃPHPÀ©Õ¹Cʱ£¬ÓõÄÊÇÔ´ÂëextĿ¼ÏµÄ./ext_skel
×îºó±àÒë×ÜÊDz»ÄÜÉú³ÉÀ©Õ¹Ä£¿éµÄ.so¶¯Ì¬¿â£¬ÎÒÓõİ汾ÊÇ5.3.0£¬
ÕâÊÇÔõô»ØÊ£¬¸ßÊÖ½â´ðÏÂ
²»ÄÜÉú³ÉʱÓÐɶÌáʾÐÅÏ¢£¿
ÔËÐÐÁË/ext_skel --extname=Ä ......
¹¤×÷ÄÚÈÝ Ñз¢
×ʸñÒªÇó£º
211ºÍÖØµãԺУ±¾¿Æ 3Ä깤×÷¾Ñé
211ºÍÖØµãԺУ˶ʿ 1Ä깤×÷¾Ñé
ÆÕͨԺУÔÚ¹¤×÷ÄêÏÞÉϸ÷¼Ó1Äê
ÓÐͨÐÅÏà¹Ø¿ª·¢¾ÑéÕßÓÅÏÈ£¬µ±È»C/C++ »ù´¡ÒªÔúʵ
à ......
ÎÊÌâ:¹¤µØÉÏÐèÒª³¤¶ÈΪA1µÄ¸Ö½îX¸ù,³¤¶ÈΪA2µÄ¸Ö½îY¸ù,³¤¶ÈΪA3µÄ¸Ö½îZ¸ù......ÒÔ´ÎÀàÍÆ.
ÆäÖÐA1,A2,A3,...³¤¶ÈÈÎÒâÖ¸¶¨,X,Y,Z,...ÊýÁ¿Ò²ÈÎÒâÖ¸¶¨.
µ«²Ö¿âÖеĸֽîΪ±ê×¼³¤¶È,Ö»ÓÐ9Ã׺Í15Ã×Á½ÖÖ³¤¶È,ÊýÁ¿² ......