几则技巧

Jun 07, 2016 pm 03:35 PM
スキル 解決する

几则技巧 这几天帮同事解决了几个问题,写在这里作为备忘,其他朋友也可以参考。 l 建立 UNICODE 的 MFC 工程 (VC6) 。 按正常步骤建立一个 MFC 应用程序工程。 打开 : Project-Settings-C/C++ 。在 Preprocessor definitions 中定义 UNICODE 和 _UNICODE 两

几则技巧

 

这几天帮同事解决了几个问题,写在这里作为备忘,其他朋友也可以参考。

 

l         建立UNICODEMFC工程(VC6)

按正常步骤建立一个MFC应用程序工程。

 

打开: Project->Settings…->C/C++。在Preprocessor definitions中定义UNICODE_UNICODE两个宏。

 

打开: Project->Settings…->Link。选择Output类别,修改Entry-Point Symbol的值为wWinMainCRTStartup

 

编译应该没有问题了。运行时若出现找不到mfcxxx.dll,从VC的安装文件中拷贝到系统目录就行了。

 

l         DLL内存释放问题(VC6)

Windows下,如果在一个DLL里分配的内存,在另外一个DLL或者在EXE里释放,程序可能会crash。这时多半是因为这些DLLEXE链接了不同的运行库,不同运行库的堆是不同的,在一个堆里分配的内存,在另外一个堆里释放,就会crash。解决方案有两个:

 

方案一:打开: Project->Settings…->C/C++。选择Code Generation类别,确保所有工程的Use run-time library的值是一致。

 

方案二:哪里分配就在哪里释放。DLL提供了分配函数,同时提供一个释放函数,这样可以确保在同一个堆里释放。

 

l         抽象工厂模式的一个实例。

同事在开发手机的PC模拟环境时,遇到这样一个问题:其可能通过串口与另外一个真实的手机通信,也可能通过Socket与另外一个模拟手机通信。由配置文件决定实际的通信方式。

 

首先自然会想到,建立一个抽象基类Stream,一个继承Stream的子类SerialPortStream,实现串口通信,和一个继承Stream的子类SocketStream,实现Socket通信。调用者通过抽象基类Stream的指针去调用不同子类的实现,从而避免大量if/else语句。

 

但是有好几地方都要创建这些对象,由于创建时仍然要关心具体的子类,前面的方法仍然不够完美。为了避免这些创建代码分散在不同的地方,可以采用抽象工厂模式。程序运行时,根据配置文件创建一个工厂对象,后面通过抽象工厂的指针去创建不同的子类。这样,调用者与实现者之间的耦合降到了最低。

 

l         DBUS marshal函数的参数个数。

DBUSglib封装的marshal函数,与glib原生的marshal完全一样。比如:

void

g_cclosure_marshal_VOID__INT (GClosure     *closure,

                              GValue       *return_value,

                              guint         n_param_values,

                              const GValue *param_values,

                              gpointer      invocation_hint,

                              gpointer      marshal_data)

{

  typedefvoid (*GMarshalFunc_VOID__INT) (gpointer     data1,

                                          gint         arg_1,

                                          gpointer     data2);

  register GMarshalFunc_VOID__INT callback;

  register GCClosure *cc = (GCClosure*) closure;

  register gpointer data1, data2;

 

  g_return_if_fail (n_param_values == 2);

 

  if (G_CCLOSURE_SWAP_DATA (closure))

    {

      data1 = closure->data;

      data2 = g_value_peek_pointer (param_values + 0);

    }

  else

    {

      data1 = g_value_peek_pointer (param_values + 0);

      data2 = closure->data;

    }

  callback = (GMarshalFunc_VOID__INT) (marshal_data ? marshal_data : cc->callback);

 

  callback (data1,

            g_marshal_value_peek_int (param_values + 1),

            data2);

}

 

语句g_return_if_fail (n_param_values == 2);有些让人迷惑,明明只有一个参数,为什么参数个数是2个。从这个函数的实现可以看出,第一个参数始终是对象本身,虽然signal只有一个参数,加上对象指针本身,参数个数变成2个了。

 

l         安装FC5的内核源码。

[root@localhost ~]# rpm -ivh kernel-2.6.15-1.2054_FC5.src.rpm

[root@localhost ~]# cd /usr/src/redhat/SPECS

[root@localhost SPECS]# rpmbuild -bp --target=i686 kernel-2.6.spec

[root@localhost SPECS]# cd ../BUILD/kernel-2.6.15/linux-2.6.15.i686/

[root@localhost linux-2.6.15.i686]# make menuconfig

[root@localhost linux-2.6.15.i686]#make

[root@localhost linux-2.6.15.i686]# rm /lib/modules/2.6.15-1.2054_FC5/build

[root@localhost linux-2.6.15.i686]# ln /lib/modules/2.6.15-1.2054_FC5/build  /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686/ -s

 

 

 

 

 

 

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Black Shark携帯電話の電源が入らない問題を解決する方法を教える5つのヒント! Black Shark携帯電話の電源が入らない問題を解決する方法を教える5つのヒント! Mar 24, 2024 pm 12:27 PM

スマートフォン技術が発展し続けるにつれて、携帯電話は私たちの日常生活においてますます重要な役割を果たしています。 Black Shark フォンは、ゲーム パフォーマンスに重点を置いたフラッグシップ フォンとして、プレイヤーから高い支持を得ています。ただし、場合によっては、Black Shark 携帯電話の電源が入らないという状況にも直面するため、この問題を解決するために何らかの措置を講じる必要があります。次に、Black Shark 携帯電話の電源が入らない問題を解決する方法を説明する 5 つのヒントを共有しましょう: ステップ 1: バッテリー残量を確認する まず、Black Shark 携帯電話に十分な電力があることを確認します。携帯電話のバッテリーが消耗している可能性があります

小紅書で公開するときに写真が自動的に保存される問題を解決するにはどうすればよいですか?投稿時に自動保存された画像はどこにありますか? 小紅書で公開するときに写真が自動的に保存される問題を解決するにはどうすればよいですか?投稿時に自動保存された画像はどこにありますか? Mar 22, 2024 am 08:06 AM

ソーシャルメディアの継続的な発展に伴い、Xiaohongshu はますます多くの若者が自分たちの生活を共有し、美しいものを発見するためのプラットフォームとなっています。多くのユーザーは、画像を投稿する際の自動保存の問題に悩まされています。では、この問題をどうやって解決すればよいでしょうか? 1.小紅書で公開するときに写真が自動的に保存される問題を解決するにはどうすればよいですか? 1. キャッシュをクリアする まず、Xiaohongshu のキャッシュ データをクリアしてみます。手順は次のとおりです: (1) 小紅書を開いて右下隅の「マイ」ボタンをクリックします。 (2) 個人センター ページで「設定」を見つけてクリックします。 (3) 下にスクロールして「」を見つけます。 「キャッシュをクリア」オプションを選択し、「OK」をクリックします。キャッシュをクリアした後、Xiaohongshu を再起動し、写真を投稿して、自動保存の問題が解決されるかどうかを確認します。 2. 小紅書バージョンを更新して、小紅書が正しく動作することを確認します。

Win11 ヒントの共有: ワン トリックで Microsoft アカウントのログインをスキップする Win11 ヒントの共有: ワン トリックで Microsoft アカウントのログインをスキップする Mar 27, 2024 pm 02:57 PM

Win11 のヒントの共有: Microsoft アカウントのログインをスキップする 1 つのトリック Windows 11 は、新しいデザイン スタイルと多くの実用的な機能を備えた、Microsoft によって発売された最新のオペレーティング システムです。ただし、一部のユーザーにとっては、システムを起動するたびに Microsoft アカウントにログインしなければならないのが少し煩わしい場合があります。あなたがそのような人であれば、次のヒントを試してみるとよいでしょう。これにより、Microsoft アカウントでのログインをスキップして、デスクトップ インターフェイスに直接入ることができるようになります。まず、Microsoft アカウントの代わりにログインするためのローカル アカウントをシステムに作成する必要があります。これを行う利点は、

初心者がフォームを作成するためのヒントは何ですか? 初心者がフォームを作成するためのヒントは何ですか? Mar 21, 2024 am 09:11 AM

私たちは Excel で表を作成したり編集したりすることがよくありますが、ソフトウェアに触れたばかりの初心者にとって、Excel を使用して表を作成する方法は私たちほど簡単ではありません。以下では、初心者、つまり初心者がマスターする必要があるテーブル作成のいくつかの手順について演習を行います。初心者向けのサンプルフォームを以下に示します。入力方法を見てみましょう。 1. Excel ドキュメントを新規作成するには 2 つの方法があります。 [デスクトップ]-[新規作成]-[xls]ファイル上の何もない場所でマウスを右クリックします。 [スタート]-[すべてのプログラム]-[Microsoft Office]-[Microsoft Excel 20**] を実行することもできます。 2. 新しい ex ファイルをダブルクリックします。

ベテラン必携:C言語の*と&のヒントと注意点 ベテラン必携:C言語の*と&のヒントと注意点 Apr 04, 2024 am 08:21 AM

C 言語では、他の変数のアドレスを格納するポインタを表し、& は変数のメモリ アドレスを返すアドレス演算子を表します。ポインタの使用に関するヒントには、ポインタの定義、ポインタの逆参照、ポインタが有効なアドレスを指していることの確認が含まれます。アドレス演算子の使用に関するヒントには、変数アドレスの取得、配列要素のアドレスを取得するときに配列の最初の要素のアドレスを返すことなどが含まれます。 。ポインター演算子とアドレス演算子を使用して文字列を反転する実際の例。

Black Shark 携帯電話充電のトラブルシューティングと解決策 Black Shark 携帯電話充電のトラブルシューティングと解決策 Mar 22, 2024 pm 09:03 PM

Black Shark は、強力なパフォーマンスと優れたゲーム体験で知られ、ゲーマーやテクノロジー愛好家に愛されているスマートフォン ブランドです。ただし、他のスマートフォンと同様に、Black Shark の携帯電話にもさまざまな問題があり、その中でよくあるのが充電の失敗です。充電障害は携帯電話の通常の使用に影響を与えるだけでなく、より深刻な問題を引き起こす可能性があるため、充電の問題を時間内に解決することが非常に重要です。この記事では、Black Shark 携帯電話の充電不良の一般的な原因から始まり、充電の問題のトラブルシューティングと解決方法を紹介し、読者が Black Shark 携帯電話の問題を解決するのに役立つことを願っています。

VSCode 入門ガイド: 初心者が使い方のスキルをすぐにマスターするための必読の書です。 VSCode 入門ガイド: 初心者が使い方のスキルをすぐにマスターするための必読の書です。 Mar 26, 2024 am 08:21 AM

VSCode (Visual Studio Code) は、Microsoft によって開発されたオープン ソース コード エディターであり、強力な機能と豊富なプラグイン サポートを備えており、開発者にとって推奨されるツールの 1 つです。この記事では、初心者が VSCode の使用スキルをすぐに習得できるようにするための入門ガイドを提供します。この記事では、VSCode のインストール方法、基本的な編集操作、ショートカット キー、プラグインのインストールなどを紹介し、具体的なコード例を読者に提供します。 1. まず VSCode をインストールします。

Win11 の裏技が明らかに: Microsoft アカウントのログインをバイパスする方法 Win11 の裏技が明らかに: Microsoft アカウントのログインをバイパスする方法 Mar 27, 2024 pm 07:57 PM

Win11 のトリックが明らかに: Microsoft アカウントのログインをバイパスする方法 最近、Microsoft は新しいオペレーティング システム Windows11 を発表し、広く注目を集めています。以前のバージョンと比較して、Windows 11 はインターフェイスのデザインや機能の改善の点で多くの新しい調整を加えましたが、いくつかの議論も引き起こしました. 最も目を引く点は、ユーザーが Microsoft アカウントでシステムにログインすることを強制することです。ユーザーによっては、ローカル アカウントでログインすることに慣れており、個人情報を Microsoft アカウントにバインドすることに抵抗がある場合があります。

See all articles