関数のコピー
以下のようなソースがあります。
していることは、char配列に関数をコピーしています。それを関数ポインタに変換して、実行しています。
自作の場合はできるのですが、
MessageBoxをコピーすると以下(字数の関係上無理でした。)のようにメモリ内容がなっており、そのままコピーしたつもりですが、若干異なっております。
どのようにすればMessageBoxがじっこうできるのか,
教えていただきたく質問しました。
よろしくお願いします。
mb,code3が該当分です。
//ソース
#include<stdio.h>
#include<memory.h>
#include<windows.h>
int func(int cnt)
{
return cnt*10;
}
int func2(int cnt,int cnt2)
{
return cnt+cnt2;
}
char *func3()
{
return "Hello";
}
int main()
{
int (*fa)(int);
//MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaotion,UINT uType);
int (*fm)(int,int);
int (*mb)(HWND,LPCTSTR,LPCTSTR,UINT);
char *(*hl)(void);
/*fa=func;
printf("%d",fa(5));
getchar();
*/
char code[12800];
char code2[12800];
char code3[80000];
char code4[12800];
memset(code,0,12800);
memset(code2,0,12800);
memset(code3,0,80000);
memset(code4,0,12800);
memcpy(code,(char *)func,12800);
memcpy(code2,(char *)func2,12800);
memcpy(code3,(char *)MessageBox,80000);
memcpy(code4,(char *)func3,12800);
fa=(int(*)(int))(void *)code;
fm=(int(*)(int,int))(void *)code2;
mb=(int(*)(HWND,LPCTSTR,LPCTSTR,UINT))(void *)code3;
hl=(char *(*)(void))(void *)code4;
printf("%d\n",fa(3));
printf("%d\n",fm(3000,10));
printf(hl());
MessageBox(NULL,"","",MB_OK);
mb(NULL,"","",MB_OK);
getchar();
return 0;
}
お礼
回答頂きありがとうございます。 #define EEPROM __attribute__((section(".eeprom"))) save_eeprom_data_t EEPROM save_eeprom_data; このように save_eeprom_data_t 構造体にまとめて、アドレス位置を決めるように設定してみました。 https://sourceforge.jp/projects/cc1101driver/scm/svn/commits/2557 助かります。