-11
#include <stdio.h>;
#include <windows.h>;
#include <malloc.h>;
typedef int (__cdecl *MYPROC)( void *epcs, char *message, char *sign,unsigned int *sig_len );
main();
{  
  HINSTANCE hh;  
  MYPROC hhLib;  
  void *j;  
  int *x = (int*)malloc(8);  
  unsigned int *y = (unsigned int*)malloc(8);  
  int *z = (int*)malloc(8);  
  char *msg, *sign ;  
  msg = (char*)malloc(512*sizeof(char));  
  sign = (char*)malloc(512*sizeof(char));  
  *x = 2541;  
  *y = 10;  
  *z = 0;  
  j = (int*)*x;  
  msg = "Test of MSG";  
  sign = "Test of Sign";  
  hh = LoadLibrary("epcs.dll");  
  if (hh == NULL)   {    
    printf("Unable to load epcs shared library\n");    
    return 0;  
  }  
  hhLib = (MYPROC)GetProcAddress(hh, "epcs_test");  
  if (hhLib==NULL)   {     
    printf("Unable to point shared library function (epcs_test).. \n");     
    return 0;  
  }  
  z = hhLib(j, msg, sign, y);  
  printf("%d \n",*x);  
  printf("%d \n",j);  
  printf("%d \n",*y); 
  printf("%d \n",*z);
  printf("%s \n",msg);
  printf("%s \n",sign);
  return 0;
}
4

3 に答える 3

1

このコードには非常に多くの問題があります。

この蒸れた排泄物の山を掃除し始めましょう。


main();

Main は である必要がありint main(void)、後にセミコロンがあってはなりません。


の戻り値をキャストしないでくださいmalloc。適切な量​​のスペースを割り当てていることを確認するために
使用します。sizeof()

これを変える:

int *x = (int*)malloc(8);  

これに:

int *x = malloc(sizeof(int));


これは、C で文字列の割り当てを行う方法ではありません。

msg = "Test of MSG";  
sign = "Test of Sign"; 

代わりに、次のようにします。

strcpy(msg, "Test of MSG");
strcpy(sign, "Test of Sign");

注: strcpy には独自の問題があり、strcpy_s が推奨されます。でも一歩ずつ。

于 2013-08-29T15:03:57.587 に答える