不可或缺 Windows Native (1) - C 语言: hello c
作者:webabcd
介绍
不可或缺 Windows Native 之 C 语言
- 在 Windows Store Apps 中调用 C/C++
- hello c
示例
1、演示如何在 Windows Store Apps(C#) 中调用 C/C++,需要新建 Windows Runtime Component(C++) 项目
NativeDll/Simple.h
/*
* .h 头文件
*/ // 保证文件只被编译一次(即使被多次引用,也只被编译一次)
#pragma once namespace NativeDll // 命名空间
{
public ref class Simple sealed // 类
{
public:
int Add(int x, int y); // 方法
};
}
NativeDll/Simple.cpp
/*
* .cpp 实现文件
*
* 为了支持 Windows Runtime Component 这种方式,所以引入 Microsoft created the Visual C++ component extensions (C++/CX),可以将其看作是连接“调用者”和“C/C++”之间的桥梁,元数据是 windows metadata (.winmd) files
* 为了让“调用者”调用 Windows Runtime Component,所以 C++/CX 会有自己的一些数据类型,比如字符串是 Platform::String^ 类型的,这样才能让“调用者”调用
* 关于 C++/CX 的相关知识请参见:https://msdn.microsoft.com/en-us/library/hh755822.aspx
*/ #include "pch.h" // 预编译头文件
#include "Simple.h" // 需要实现的头文件 // 头文件中定义的命名空间
using namespace NativeDll; // 实现头文件中的方法
int Simple::Add(int x, int y)
{
return x + y;
}
NativeDemo/Simple.xaml.cs
/*
* 演示如何用 C# 调用 C++
*
* 对应的 Windows Runtime Component(C++) 详见 NativeDll 项目
* 注意:Windows Runtime Component 项目会生成 .winmd 文件,winmd - Windows Metadata,其是语言无关的
*/ using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation; namespace NativeDemo.Demo
{
public sealed partial class Simple : Page
{
public Simple()
{
this.InitializeComponent();
} protected override void OnNavigatedTo(NavigationEventArgs e)
{
// 调用 C++ 中的函数
NativeDll.Simple simple = new NativeDll.Simple();
int result = simple.Add(, ); lblMsg.Text = "1 + 1 = " + result.ToString();
}
}
}
readme.txt
1、为了使用 C 语言,需要选中相应的 .c 文件 -> 右键 -> 属性 -> c/c++ -> 高级 -> 编译为 -> 编译为 C++ 代码(/TP)
2、比如你要用 strcpy 的话,在 vs 中会警告你,要求你用 strcpy_s,但是 strcpy_s 是微软自己的,为了去掉这个警告可以这么做:
a) 在文件开头定义 #define _CRT_SECURE_NO_WARNINGS
b) 或者一劳永逸的方法:dll 项目 -> 右键 -> 属性 -> c/c++ -> 预处理器 -> 在“预处理器定义”增加 “_CRT_SECURE_NO_WARNINGS”
3、调试本地代码:选中解决方案 -> 右键 -> 属性 -> 调试 -> 调试器类型 -> 选中“混合(托管和本机)”
4、如何在新建 c 代码时,默认保存为 utf-8 格式:在类似 D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcprojectitems 的目录下修改模板文件“hfile.h”和“newc++file.cpp”的文件格式为 utf-8
2、hello c
cHello.h
// c 的 .h 文件 // 头文件一般用于放置:需要向外暴露的宏定义,全局变量声明,函数声明 // 防止同一文件的二次编译。比如你有两个 c 文件,这两个 c 文件都 include 了同一个头文件,在编译时,这两个 c 文件就会被一同编译,那么就带来了声明冲突的问题
#ifndef _MYHEAD_HELLO_ // 是 if not defined 的缩写,如果没定义 _MYHEAD_HELLO_ 则执行这一块
#define _MYHEAD_HELLO_ // 定义 _MYHEAD_HELLO_ // 在 c++ 中写 c 语言代码
#ifdef __cplusplus // 如果当前是 c++ 环境
extern "C" // 告诉 c++ 下面的 { } 块中写的是 c 语言代码
{
#endif // 函数声明
char *demo_cHello(char *name); #ifdef __cplusplus // 如果当前是 c++ 环境
}
#endif /*
// 在 windows 环境下,可以简写成这样
#ifdef __cplusplus
extern "C"
#endif char *demo_cHello(char *name);
*/ #endif // #ifndef _MYHEAD_HELLO_
cHello.c
/*
* hello c
*/ #include "pch.h" // 预编译头文件
#include "cHello.h" // 引入需要实现的头文件
#include "cHelper.h" // 引入自定义函数的头文件 char *demo_cHello(char *name)
{
return str_concat2("hello: ", name);
} // 本 demo 无法演示 main 函数,所以以下做一些关于 main 函数的文字说明 // main 函数是入口函数,不能被其它函数调用
// 假设命令为:可执行文件名 参数1 参数2 参数3
int main(int argc, char *argv[]) // main 函数也可以是无参无返回值的,即:int main(void) { } 或 void main(void) { } 都是可以的
{
// argc 是参数个数;argv 是参数值 // argc - 等于 4 (注:“可执行文件名”也算一个参数)
// argv[0] - 可执行文件名; argv[1] - 参数1; argv[2] - 参数2; argv[3] - 参数3 // 返回 0 代表正常
return ;
}
OK
[源码下载]
不可或缺 Windows Native (1) - C 语言: hello c的更多相关文章
- 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型
[源码下载] 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 常量 变量 基本 ...
- 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等
[源码下载] 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等 作者:webabcd 介绍不可或缺 Windows Native ...
- 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出
[源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...
- 不可或缺 Windows Native (5) - C 语言: 数组
[源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...
- 不可或缺 Windows Native (6) - C 语言: 函数
[源码下载] 不可或缺 Windows Native (6) - C 语言: 函数 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 函数 示例cFunction.h # ...
- 不可或缺 Windows Native (7) - C 语言: 指针
[源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域
[源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...
- 不可或缺 Windows Native (10) - C 语言: 文件
[源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...
随机推荐
- AngularJS初始化闪烁
可以使用:ng-if和ng-cloak解决,原因见:http://www.cnblogs.com/whitewolf/p/3495822.html
- mysql隔离级别
MySQL/InnoDB定义的4种隔离级别: Read Uncommited 可以读取未提交记录. Read Committed (RC) 针对当前读,RC隔离级别保证对读取到的记录加锁 (记录锁), ...
- Oracle数据库说明
- coreseek 提示 client version is higher than daemon version 解决办法
安装好coreseek,开启了服务之后,通过 sphinx php扩展去请求数据,提示:client version is higher than daemon version (client is ...
- js apply/call/caller/callee/bind使用方法与区别分析
一.call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容). Js代码 call([thisObj[,arg1[, arg2[, ...
- 解决Eclipse报errors running builder ‘javascript validator’ on project
导入jquery的js到项目中,Eclipse每次检测到功能代码变化(保存动作触发)就报错: errors running builder ‘javascript validator’ on proj ...
- [Git] 快速签出与更新所有远程分支.md
git-fetch 命令从远程仓库复制 heads 和 tags 信息到本地,保存在临时文件 .git/FETCH_HEAD 中以备 git-merge 命令使用. 你可以使用 git fetch 命 ...
- Maven进价:Maven的安装和目录结构
一.在windows上安装Maven 1.下载 下载地址:http://maven.apache.org/download.html 下载最新版本 maven3.2.5 2.解压 解压地址:F:\Ja ...
- maven -- 问题解决(一)解决eclipse中maven项目出现的问题
配置项目时出现的错误: error: Cannot change version of project facet Dynamic Web Module to 2.5. error: One or m ...
- [IR] Information Extraction
阶段性总结 Boolean retrieval 单词搜索 [Qword1 and Qword2] O(x+y) [Qword1 and Qword2]- 改进: Gallo ...