VS2008里,创建一个win32 static libraryd静态库后,怎么添加一个 symbol “TETLIBRARY” 到编译开关?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2008里,创建一个win32 static libraryd静态库后,怎么添加一个 symbol “TETLIBRARY” 到编译开关?相关的知识,希望对你有一定的参考价值。

要求是:add the symbol “TETLIBRARY” to compile switches,然后再build

楼上大概意思都说了,不赘述。
要求中,如果只是添加一个预编译标识符号,这个很简单,看需要做什么,这个和_DEBUG和_RELEASE的定义一个位置,你可以在项目设置里面参考一下。
如果需要像_DEBUG这样的用法,就要注意,每个编译模式里面是否需要不一样(就像_DEBUG),这样做程序代码里面做这样的判定才可能有意义:
#ifdef TETLIBRARY
....

#else
....

#endif
参考技术A 在解决方案管理器中,选中项目点右键->属性->配置属性->C/C++->预处理器->预处理器定义, 在最后边加上 ;TETLIBRARY

Win7 VS2015 x64汇编语言编写DLL文件

有点坑记录一下。

首先创建工程时选控制台类型工程,Win32估计就应该选Win32的,反正我测试用的控制台。

然后选DLL类型,除了Empty其他全都去掉。

技术分享

工程属性,masm勾上。

技术分享

 

技术分享

Linker >> Advanced里

Entry Point写上默认的入口函数

DllEntryPoint

技术分享

Linker >> Input里

Module Definition File写上你所用的def文件名

技术分享

建立asm和def文件,如下

 

ASM

 

.code

DllEntryPoint proc
	mov rax, 1
	ret
DllEntryPoint endp

AddFun proc
	mov eax, ecx
	add eax, edx
	ret
AddFun endp
end

 

DEF

 

LIBRARY "ASM64DLLTest"  
EXPORTS  
AddFun

 

技术分享

 

然后就可以了,只是一个简单的加法函数,对应C++版本为

__declspec(dllexport) int Add(int a, int b)
{
	return (a + b);
}

 

然后写个x64控制台程序测试一下。

 

#include <iostream>

#include <windows.h> 

using namespace std;

typedef int(*MYPROC)(int, int);

int main()
{
	HINSTANCE hinstLib;
	MYPROC ProcAdd;
	BOOL fFreeResult = FALSE;

	// Get a handle to the DLL module.
	hinstLib = LoadLibrary(TEXT("ASM64DLLTest.dll"));

	// If the handle is valid, try to get the function address.
	if (hinstLib != NULL)
	{
		ProcAdd = (MYPROC)GetProcAddress(hinstLib, "AddFun");

		// If the function address is valid, call the function.
		if (NULL != ProcAdd)
		{
			cout << (ProcAdd)(1, 2) << endl;

			cout << "LoadLibrary Success and Function Run" << endl;
		}
		else
		{
			cout << "LoadLibrary Success and GetProcAddress Fail" << endl;
		}

		// Free the DLL module.
		fFreeResult = FreeLibrary(hinstLib);

		if (fFreeResult == 1)
		{
			cout << "FreeLibrary Success" << endl;
		}
		else
		{
			cout << "FreeLibrary Fail" << endl;
		}
		
	}
	else
	{
		cout << "LoadLibrary Fail" << endl;
	}

	return 0;
}

  

结果

 

技术分享

 

以上是关于VS2008里,创建一个win32 static libraryd静态库后,怎么添加一个 symbol “TETLIBRARY” 到编译开关?的主要内容,如果未能解决你的问题,请参考以下文章

怎样用vs 2008 编译C程序

我安装的VS2008怎么win32控制台应用程序生成时窗口总是自动运行一遍就自动关闭

vs2008新建win32控制台程序提示:脚本错误

Win7下在Visual Studio 2008里运行程序时出现找不到MFC90D.dll文件, Command Prompt找不指定路径

vs2008 Win32 应用程序向导的“下一步”变灰色

visual c++ 2008中如何运行一个 .cpp文件