我想将仅包含一个函数的程序集文件与生成的目标文件链接。我想知道如何在MASM中创建.obj文件,还需要知道如何创建这样的函数。这对于将两个整数加在一起的函数是否足够?
public void openImg(){
Intent photoPic = new Intent(Intent.ACTION_PICK);
photoPic.setType("image/*");
startActivityForResult(photoPic, SELECT_PHOTO);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case SELECT_PHOTO:
if(resultCode == RESULT_OK){
Uri selectedImage = data.getData();
img1.setImageURI(selectedImage);
InputStream imageStream = null;
try {
//getting the image
imageStream = getActivity().getContentResolver().openInputStream(selectedImage);
imageStream.close();
}catch (IOException e){
e.printStackTrace();
}//end try-catch
if(i1 == true){
img1.setImageURI(selectedImage);
i1 = false;
b1 = true;
}
if(i2 == true){
img2.setImageURI(selectedImage);
i2 = false;
b2 = true;
}
if(i3 == true){
img3.setImageURI(selectedImage);
i3 = false;
b3 = true;
}
if(i4 == true){
img4.setImageURI(selectedImage);
i4 = false;
b4 = true;
}
if(i5 == true){
img5.setImageURI(selectedImage);
i5 = false;
b5 = true;
}
if(i6 == true){
img6.setImageURI(selectedImage);
i6 = false;
b6 = true;
}
if(i7 == true){
img7.setImageURI(selectedImage);
i7 = false;
b8 = true;
}
if(i8 == true){
img8.setImageURI(selectedImage);
i8 = false;
b8 = true;
}
}//end of 1st IF
else{
Toast.makeText(getContext(),"Fail To Get Image", Toast.LENGTH_SHORT).show();
}
}//end of Switch
}//end of Method
如果我创建并链接obj文件,我可以做
intadd PROC int1:DWORD int2:DWORD
mov eax, int1
mov ebx, int2
add eax, ebx
intadd ENDP
获得2个?
总结:如果我的代码包含上述宏,我需要知道如何从MASM创建.obj文件,以及如果我的代码不起作用,如何从HLL调用宏。
答案 0 :(得分:1)
我相信Visual C ++的标准安装还将安装ml.exe
和ml64.exe
,它们两者都产生与该版本的Visual C ++ .obj
兼容的link.exe
文件。
您可以做的是,将ml /c asmfile.asm
的汇编文件组装成.obj
文件后,在.c
文件中添加以下行:
extern int intadd(DWORD int1, DWORD int2);
使用.c
编译cl /c cfile.c
代码,然后使用.obj
将两个link asmfile.obj cfile.obj /OUT:exefile.exe
文件链接到最终可执行文件中。
请注意,您的汇编功能无效,因为一旦丢失了ret
语句-调用该语句将使程序崩溃。
如果您要查找有关如何在Visual Studio中将程序集文件集成到Visual C ++项目中的信息,this question将提供一些信息。