我在我的机器上用C++创建了一个dll注入方法,当我尝试将特定的dll注入到游戏中时,它非常有效.但是,当我在我朋友的计算机上运行该程序时(没有安装Visual Studio可再发行组件),我被警告我需要MSVCR等...(可再发行组件).
所以我在发布模式下使用Visual Studio 2012中的以下设置编译:运行时库:多线程/ MT.现在,当我在朋友的机器上运行它时,我被警告我只需要库MSVCP110D.dll (很奇怪,要求调试版本)(没有防病毒软件,UAC被禁用).我在发布路径中手动复制了所请求的库,但仍无法正常工作.
究竟是什么问题?
这是我制作的注塑代码:
int inject(string lpLibraryPath)
{
HANDLE hProc;
LPVOID paramAddr;
HINSTANCE hDll;
hDll = LoadLibrary(L"KERNEL32");
fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");
hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id);
paramAddr = VirtualAllocEx(hProc, 0, strlen(lpLibraryPath.c_str()) + 1, MEM_COMMIT, PAGE_READWRITE);
if(WriteProcessMemory(hProc, paramAddr, lpLibraryPath.c_str(), strlen(lpLibraryPath.c_str()) + 1, NULL) == NULL)
{
return 0;
}
CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0);
CloseHandle(hProc);
return 1;
}
};
Run Code Online (Sandbox Code Playgroud)
这是主要功能 - 在这里我称之为方法
int inject(string lpLibraryPath)
{
HANDLE hProc;
LPVOID paramAddr; …Run Code Online (Sandbox Code Playgroud) 我正在研究一个项目,我想按顺序打印一个字符串数组的每个3个元素.如果字符串是"cadgfacbda",我想在控制台中打印:
**"cad gfa cbd a"**
这是代码:
string str("cadgfacbda");
for(int i = 0 ; i < 3 ; i++)
{
for(int j = i ; j < str.size() ; j +=3 )
{
cout << str[j]<<" ";
}
cout<<endl;
}
Run Code Online (Sandbox Code Playgroud)
但我得到的是:
CGCA
空军基地
爸
我在C++ SDL lib中工作.我试图动态创建一些矩形.但它不起作用.我在搜索stackoverflow.com时找到的唯一解决方案是创建一个常量值,我不想这样做.
谁能帮我?
这是我的代码:
void lvl001(){
max_score = 20;
count_enemies = 2;
SDL_Surface *enemie;
SDL_Rect enemies_sources[no] , enemies[no];
enemie = SDL_LoadBMP("player.bmp");
for( int count = 1; count <= no ; count++ ){
enemies_sources[count].x = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
还有一件事.如果有一个解决方案,那么如果我想blit它,我该SDL_Blit...怎么办?()?
我正在研究一个项目,我需要的是获取n二进制文件的最后几位.我尝试了一些东西,但是我工作得不好.这是代码:
long long int to_bin(int n)
{
long long int Fin=0,pow=1;
while(n)
{
Fin=Fin+(n%2)*pow;
n/=2;pow*=10;
}
return Fin;
} // returns binary
int get_last_n_digits(int nr , int n_dig)
{
int l_digits =0 , power = 1;
for(int i = 0 ; i < n_dig ; i++)
power *=10;
l_digits = nr%power;
return l_digits;
} //returns last digits of a number
Run Code Online (Sandbox Code Playgroud)
例如,我需要245的二进制表示的最后2位,即这样的东西:
get_last_n_digits(to_bin(254,S) ;
Run Code Online (Sandbox Code Playgroud)
结果是:4; 怎么了 ?