Wonder Club world wonders pyramid logo
×

Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications Book

Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications
Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications, , Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications has a rating of 3.5 stars
   2 Ratings
X
Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications, , Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications
3.5 out of 5 stars based on 2 reviews
5
0 %
4
50 %
3
50 %
2
0 %
1
0 %
Digital Copy
PDF format
1 available   for $99.99
Original Magazine
Physical Format

Sold Out

  • Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications
  • Written by author Syd Logan
  • Published by Addison-Wesley, December 2007
  • Cross-Platform Development in C++ is the definitive guide to developing portable C/C++ application code that will run natively on Windows, Macintosh, and Linux/Unix platforms without compromising functionality, usability, or quality. Long-time Mozilla
Buy Digital  USD$99.99

WonderClub View Cart Button

WonderClub Add to Inventory Button
WonderClub Add to Wishlist Button
WonderClub Add to Collection Button

Book Categories

Authors

Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1

Areas That Can Affect Software Portability . . . . . . . . . . . . . . . . . . . 3

The Role of Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1 Policy and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Item 1: Make All of Your Platforms a Priority . . . . . . . . . . . . . . . . . 17

Item 2: Code from a Common Codebase . . . . . . . . . . . . . . . . . . . . 22

Platform Factory Implementations . . . . . . . . . . . . . . . . . . . . . . . 29

Implementation Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Platform-Specific ProcessesImpl Classes . . . . . . . . . . . . . . . . . . . 32

Creating the Instance Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . 42

Organizing the Project in CVS or SVN . . . . . . . . . . . . . . . . . . . 45

Makefiles and Building the Code . . . . . . . . . . . . . . . . . . . . . . . . . 49

Item 3: Require Developers to Compile Their Code

with Different Compilers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Item 4: Require Developers to Build Their Code on

Multiple Platforms .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Item 5: Test Builds on Each Supported Platform . . . . . . . . . . . . . . . 60

Item 6: Pay Attention to Compiler Warnings . . . . . . . . . . . . . . . . . . 61

GNU Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Microsoft Visual C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

2 Build System/Toolchain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

Item 7: Use Whatever Compiler Makes the Most Sense

for a Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Item 8: Use Native IDEs When Appropriate . . . . . . . . . . . . . . . . . . 67

Item 9: Install and Use Cygwin on Windows . . . . . . . . . . . . . . . . . . 71

Item 10: Use a Cross-Platform Make System . . . . . . . . . . . . . . . . . . 76

Make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Building on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Autoconf/Automake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Imake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Installing on Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Installing on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Using Imake, an Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Imakefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Building a Complete Program from Multiple Sources . . . . . . . . . 95

Overriding Defaults with site.def . . . . . . . . . . . . . . . . . . . . . . . . 99

Eliminating #ifdefs in Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

Files Used by Imake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Building Projects with Subdirectories . . . . . . . . . . . . . . . . . . . . 108

Building Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

3 Software Configuration Management . . . . . . . . . . . . . . . . . . 131

Item 11: Use a Cross-Platform Bug Reporting and

Tracking System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Ability to Track Platform-Specific Bugs . . . . . . . . . . . . . . . . . . 133

Bugzilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Item 12: Set Up a Tinderbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Item 13: Use CVS or Subversion to Manage Source Code . . . . . . . 147

Setting Up and Using CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Item 14: Use Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Patch Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Dealing with Rejects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Patch and Cross-Platform Development . . . . . . . . . . . . . . . . . . 163

4 Installation and Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Item 15: Provide Support for Native Installers . . . . . . . . . . . . . . . 165

XPInstall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Platform Installs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

5 Operating System Interfaces and Libraries . . . . . . . . . . . . . . . 221

Item 16: Use Standards-Based APIs (For Example, POSIX) . . . . . . 222

POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Support for POSIX, SVID, XPG, and BSD . . . . . . . . . . . . . . . 226

Using Standards Support in GCC . . . . . . . . . . . . . . . . . . . . . . . 227

Microsoft Runtime Library Support for POSIX . . . . . . . . . . . . 231

Using GCC on Microsoft Windows . . . . . . . . . . . . . . . . . . . . . 234

Deciding Which Standards to Support . . . . . . . . . . . . . . . . . . . 240

Item 17: Consider Using a Platform Abstraction Library

Such as NSPR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Why NSPR? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

NSPR Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Additional NSPR Functionality . . . . . . . . . . . . . . . . . . . . . . . . 260

6 Miscellaneous Portability Topics . . . . . . . . . . . . . . . . . . . . . . . 273

Item 18: Take Care When Using Floating Point . . . . . . . . . . . . . . . 274

Don’t Serialize Floating-Point Values as Binary . . . . . . . . . . . . 276

Equality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Item 19: Be Explicit Regarding the Sign of Char Types . . . . . . . . . 278

Item 20: Avoid the Serialization of Binary Data . . . . . . . . . . . . . . 280

Item 21: Avoid Problems Related to the Size and

Organization of Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Size of Integer Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

NSPR and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Sizes and Efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

Integer Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

Struct Alignment and Ordering . . . . . . . . . . . . . . . . . . . . . . . . . 299

7 User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Item 22: Separate the User Interface from the Model . . . . . . . . . . 304

Separating the User Interface and Application Logic

with Model/View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Using Publish/Subscribe to Communicate between

the View and the Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

Item 23: Develop a Cross-Platform User Interface Strategy . . . . . . 323

Issues Affecting Portable Cross-Platform GUI

Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Choosing a GUI Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

8 wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

Installing wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

A Simple Example: Hello wxWidgets . . . . . . . . . . . . . . . . . . . . 335

Creating the Application User Interface . . . . . . . . . . . . . . . . . . 337

Building wxWidgets Applications . . . . . . . . . . . . . . . . . . . . . . . 345

Controls and Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Container Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

Composite Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Internationalization and Localization . . . . . . . . . . . . . . . . . . . . 410

9 Developing a Cross-Platform GUI Toolkit in C++ . . . . . . . . . . . 427

What is XUL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

DHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

Scripting Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

The Document Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . 434

Style Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437

XUL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

Windows and Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

Toolbars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

Other Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

Programming with XUL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

Adding Logic to the UI with JavaScript . . . . . . . . . . . . . . . . . . 443

Interfacing JavaScript and C/C++ Code with XPCOM

and XPConnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444

Trixul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Widget Support in Trixul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

Basic Operation of Trixul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448

Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

Implementation Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

Creating Widget Implementation Objects . . . . . . . . . . . . . . . . . 459

Widget Factories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

Application Main Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

Steps Taken by Trixul to Create a User Interface . . . . . . . . . . . . 471

Documents, Elements, and the DOM . . . . . . . . . . . . . . . . . . . . 472

Widget Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

Scrolled Windows and Layout . . . . . . . . . . . . . . . . . . . . . . . . . 484

Integration with JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

Integrating with C++ Components . . . . . . . . . . . . . . . . . . . . . . 496

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519


Login

  |  

Complaints

  |  

Blog

  |  

Games

  |  

Digital Media

  |  

Souls

  |  

Obituary

  |  

Contact Us

  |  

FAQ

CAN'T FIND WHAT YOU'RE LOOKING FOR? CLICK HERE!!!

X
WonderClub Home

This item is in your Wish List

Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications, , Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications

X
WonderClub Home

This item is in your Collection

Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications, , Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications

Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications

X
WonderClub Home

This Item is in Your Inventory

Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications, , Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications

Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications

WonderClub Home

You must be logged in to review the products

E-mail address:

Password: